Nebenstehenden Button ermitteln
- VB.NET
- .NET (FX) 4.0
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.
-
-
@Hilfe0987 So was:
VB.NET-Quellcode
- Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
- Dim btn = DirectCast(sender, Button)
- Dim loc = btn.Location
- For Each element In Controls.OfType(Of Button)()
- Dim loc2 = element.Location
- Console.WriteLine(distance(loc, loc2))
- Next
- End Sub
- Private Function distance(loc1 As Point, loc2 As Point) As Integer
- Dim dx = loc1.X - loc2.X
- Dim dy = loc1.Y - loc2.Y
- Return dx * dx + dy * dy
- End Function
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
Hi
schau' dir mal Array.IndexOf, Button und Plus-und Minus-Rechnung (und die Grundlagen) an. Danach erzeuge ein Array der Buttons und suche im Button.Click-Ereignis über IndexOf im Array nach dem Button, der in sender steht. Dann hast du über + und - die Nachbarn...
Und schau' dir unbedingt die Grundlagen an. Wenn du bei so einer trivialen Frage Hilfe benötigst und du es nicht schaffst, weil es dir nicht entsprechend serviert wird, weil du nicht einmal die geringste Eigeninitiative zeigst, dann läuft da definitiv was falsch in der Art, wie du es lernst.
Viele Grüße
~blaze~ -
Hilfe0987 schrieb:
nur für die umliegenden...!
Das musst Du doch wissen. Was ist, wenn es zwei gleich weit entfernte Button gibt?
Bitte beschreib mal ganz genau: Wozu brauchst Du das?Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
Welche Button sind denn die umliegenden?
Das hängt davon ab, welchen Button man anklickt.
RodFromGermany schrieb:
Bitte beschreib mal ganz genau: Wozu brauchst Du das?
Für ein Spiel. -
Hilfe0987 schrieb:
Für ein Spiel.
RodFromGermany schrieb:
Bitte beschreib mal ganz genau: Wozu brauchst Du das?Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
Das ist ein Spiel mit Feldern. Wenn du ein Feld anklickst, ändert sich die Farbe. Ab diesem Zeitpunkt kann man nur noch Felder anklicken, die neben einem Feld von einem selbst liegen (deshalb rund herum prüfen, ob ein Feld vom Spieler bereits in der Nähe vorhanden ist, mit backcolor checken).
Es sollen die Spieler also quasi nur Felder in ihrem "Gebiet" auswählen können!
-
@Hilfe0987 Völlig falsche Herangehensweise.
Du musst per Design wissen, welches das benachbarte Feld ist. Die Grundidee bei @~blaze~ .
Pack die Buttons in ein 2-Dimensionales Array:Dim btns(,) As Button
. Nutze dieTag
-Property und trag da den x- und y-Index ein. Dann kannst Du per Index-Rechnung Deine Nachbarn bestimmen.
Feddich.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
VB.NET-Quellcode
- Private Sub Form13_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- For Each co As Control In Me.Controls
- If TypeOf co Is Button Then
- AddHandler DirectCast(co, Button).Click, AddressOf Button_Click
- co.Tag = co.Location.X & ";" & co.Location.Y
- End If
- Next
- End Sub
- Private Sub Button_Click(sender As Object, e As EventArgs)
- Dim bt As Button = DirectCast(sender, Button)
- MsgBox(bt.Tag)
- End Sub
Das hab ich bis jetzt, ich weiß jetzt welche Koordinaten das angeklickte Feld hat. Und weiter? Kann ich den Button auswählen, indem ich die Koordinaten -die Länge des Feldes rechne und kann ich dann die Eigenschaften des neuen Buttons auslesen?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Hilfe0987“ ()
-
Hilfe0987 schrieb:
Und weiter?
Pack Deine Buttons in ein 2-dimensionales Array. Die Indizes laufen vonx = 0 bis AnzahlX - 1
bzw.y = 0 bis AnzahlY - 1
.
Die Indizes packst Du in denTag
.
Beim Klick holst Du die Indizes zaus und hast x +-1 und y +-1 und feddich.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
@ErfinderDesRades du hast schon recht. Über Eck soll nicht möglich sein, sprich jedes Feld (außer die am Rand) haben 4 angrenzende Felder.
Wie kann ich die Eigenschaften dieser 4 angrenzenden Felder während der Laufzeit ermitteln, wenn ich das Feld in der Mitte geklickt habe? -
@Hilfe0987 Das haben wir Dir doch die ganze Zeit erzählt.
Eigene Indizes ermitteln, Indizes der Nachbar-Elemente ermitteln,mit eben genau diesen Indizes
gehst Du in das 2-Dimensionale Array und hast Deine Objekte und damit deren Eigenschaften.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
-
-
weißt du denn ühaupt, was ein array ist?
Also wenn du 3 Buttons in ein Array packen wollen würdest - wie sähe der Code aus? -
RodFromGermany schrieb:
Pack die Buttons in ein 2-Dimensionales Array:Dim btns(,) As Button
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
ErfinderDesRades schrieb:
Also wenn du 3 Buttons in ein Array packen wollen würdest - wie sähe der Code aus?
-
prima!
Also das ist ein eindimensionales Array, und mit einem Index kann man darin einen Button addressieren:
Nun ein 2-D-Array - (siehe unbedingt auch Rods Link):
(Oder auch wie ein Koordinatensystem mit x- und y-Richtuing. Man kann nämlich ebenso noch weitere Dimansionen hinzufügen: 3-D - Würfel, mit z-Achse, 4-D - ohne räümliche Vorstellbarkeit,...)
Jdfs 2D heisst 2D, weil man nun zwei Indizees braucht, um ein Element zu addressieren:
Dein 2D-Array wird aber noch failen, denn man muss Deklaration und Initialisierung trennen.
Denn wo das Array deklariert wird, sind die Buttons noch nicht initialisiert, also du würdest ein Array von Buttons erhalten, und alle wären Nothing.
Die Initialisierung des Arrays darf also erst nach InitializeComponents erfolgen - im frühesten Falle also inSub New()
, (ansonsten halt im Form_Load - das kommt ja kurz darauf).
VB.NET-Quellcode
- Private _Buttons As Button(,) ' Deklaration ...
- 'Private _Buttons As Button(,) = {{Button1, Button2, Button3},
- ' {Button4, Button5, Button6},
- ' {Button7, Button8, Button9},
- ' {Button10, Button11, Button12}} ' das hier wäre zu früh - erst muss InitializeComponent() durchgelaufen sein
- Public Sub New()
- InitializeComponent() ' hier werden die im Designer eingerichteten Controls erstellt - vorher sind sind sie nur deklariert, aber nicht initialisiert, wären also Nothing
- ' **danach** erst Initialisierung von _Buttons
- _Buttons = {{Button1, Button2, Button3},
- {Button4, Button5, Button6},
- {Button7, Button8, Button9},
- {Button10, Button11, Button12}}
- End Sub
So, nun kannste endlich was damit tun:
Bitte kopiere die letzten beiden Listings bei dir ein, und überzeuge dich von ihrer Fehlerfreiheit. Und melde zurück, obs geklappt hat.
Ich bin eiglich ziemlich genervt von Leuten, die mir ausführliche Erklärungen aus den Rippen leiern, und sich dann ühaupt nicht damit beschäftigen, was ich für sie zusammenstelle.
Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
Ähnliche Themen
-
8 Benutzer haben hier geschrieben
- Hilfe0987 (17)
- RodFromGermany (12)
- VB1963 (4)
- ErfinderDesRades (4)
- VaporiZed (3)
- mikeb69 (2)
- Fakiz (2)
- ~blaze~ (2)