Laden...

Zeichenprogramm: Bei Klicken und gedrücktlassen auf Button wird im Form kein MouseMove ausgelöst

Erstellt von grinderwahn vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.596 Views
G
grinderwahn Themenstarter:in
3 Beiträge seit 2015
vor 9 Jahren
Zeichenprogramm: Bei Klicken und gedrücktlassen auf Button wird im Form kein MouseMove ausgelöst

Hallo Ihr,

Ich bin dabei ein Steuerungsprogramm für eine LED-Matrix zu erstellen.

Die Kommunikation über Bluetooth funktioniert schon bestens 😃

Ein Problem habe ich bei der Repräsentation der Matrix im Programm.
Ich habe 16x16 RGB Pixel die ich ähnlich wie in Paint steuren will. Das heißt eine Art Farbpalette zum Auswählen einer Farbe und ein "Malbereich" mit 16x16 Pixeln. Die Farbauswahl per ColorDialog ist kein Problem. Nur beim "Malbereich" weiß ich nicht so recht wie. Ich habe schon verschiedene Varianten probiert:

16x16 Buttons:
Klicke ich ein Button bekommt er die Farbe zugewiesen und Befehl wird auch an Matrix geschickt.
Problem: Drücke ich ein Button und möchte mit weiterhin gedrückter Maustaste weitere Felder "anmalen" finde ich kein Event das ausgelöst wird.
16x16 Label: Selbiges wie bei Buttons
16x16 RectangleShapes aus PowerPack:
Hier funktioniert das "anmalen" mehrerer Shapes mit gedrückter Maustast (Hier wird komischerweise das MouseMove Event aufgerufen) aber es muss zum einem extra installiert werden und ist recht träge im Aufbau.

Habt ihr bessere Ideen wie man den Malbereich realisieren könnte?

Von Interesse wäre auch wie man das "Bild" abspeichern kann um so Animationen zu malen.

Ich nutze C# im Visual Studio 2013

Angehängt das Form mit RectangleShapes

T
314 Beiträge seit 2013
vor 9 Jahren

Die Frage hast Du dir ja schon indirekt selbst beantwortet. Da du kein Klick mehr auslöst musst Du eben ein anderes Event suche z.B. MouseMove oder MouseEnter... Musst in dem moment dann natürlich feststellen, ob derzeit geklickt wird oder nicht.

Speicher.... Was willst Du denn speichern? Das tatsächliche Bild oder die nötigen Daten zur Erzeugung des "Bildes"

G
grinderwahn Themenstarter:in
3 Beiträge seit 2015
vor 9 Jahren

Mit MouseMove oder MouseEnter habe ich es schon probiert. Es funktioniert aber nicht. Wenn ich z.B. Button1 anklicke und ziehe dann die Maus mit weiterhin gedrückter Maustaste über Button2 wird bei Button2 kein Event ausgelöst. Habe alle durchprobiert.
Bei den RectangleShapes aus dem PowerPacks wird MouseMove ausgeführt und ich frage dann die Maustaste ab:


private void rectangleShape_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
         RectangleShape aktshape = sender as RectangleShape;
          if (aktshape != null)
          {
               aktshape.BackColor = aktuelleFarbe.BackColor;
               // Nummer extrahieren und LED setzen
               string lednr = aktshape.Name.Substring(14);
               eine_LED_setzen(lednr, aktshape.BackColor);
        }
    }
}

Mit speichern meine ich die Farbe der Shapes der Reihe nach auslesen und speichern. Ein genaues Format habe ich mir noch nicht ausgedacht. Bei RectangleShapes funktioniert folgender Code allerdings NICHT:


private void speichern_Click(object sender, EventArgs e)
{
	string allefarben ="";
	foreach (RectangleShape shape in panel1)
	{
		string farbe;
		farbe = shape.BackColor.ToString();
		allefarben = allefarben + farbe;
	}
	MessageBox.Show(allefarben);
}

T
314 Beiträge seit 2013
vor 9 Jahren

Du musst zusätzlich den Capture des "aktuellen" Controls auf false setzen.

siehe What event is raised when the mouse is moved while a button is pressed?

G
grinderwahn Themenstarter:in
3 Beiträge seit 2015
vor 9 Jahren

Vielen Dank! So habe ich es mir vorgestellt.

Dann funktioniert auch die Abfrage:


foreach (Control ctrl in panel1.Controls)
{
	if (ctrl is Button)
	{
		string lednr = ctrl.Name.Substring(6);
		Color farbe = ctrl.BackColor;
		// Tu sonstwas
	}
}