Hallo zusammen
Bei einem Programm sollen so wenig verwirrende Buttons wie möglich erscheinen. Daher das Kontex Menü. nun suche ich nach einer einfachen Lösung um ein Kontext Menü das auf jeder Zeile in einer ListView per rechts-Click erscheint, so umzubauen, dass es erscheint, wenn die linke Maustaste gedrückt wird. Einfach weil das Programm über einen TouchScreen bedient wird, und keine Maus zur Verfügung steht. Wenn die Zeile also angetippt wird, würde das Kontext Menü erscheinen, da linke Maustaste. Oder gibt es dafür eine bessere Lösung ? Vielen Dank.
Hat da Jemand Erfahrung damit ?
private void Button1_Click(object sender, EventArgs e)
{
listView1.FullRowSelect = true;
listView1 item = new ListViewItem("1");
item.SubItems.Add("");
item.SubItems.Add("TestEintrag1");
item.SubItems.Add("TestEintrag2");
listView1.Items.Add(item);
}
private void exitToolStripMenuItem_Click( object sender, EventArgs e )
{
return;
}
private void removeToolStripMenuItem_Click( object sender, EventArgs e )
{
if (listView1.Items.Count > 0)
listView1.Items.Remove( listView1.SelectedItems[0] );
}
Hallo ToRi,
normalerweise simuliert man Rechtsklicks auf dem Touchscreen mit dem "berühmten" 300ms-Delay. Tippt also der User mehr als 300ms auf ein Item ist das im Falle eines Touchscreens ein Rechtsklick.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Hallo Coffeebean,
Danke für die Antwort. Das habe ich nicht gewusst, dann würde es ja ohne weiteres funktionieren. Jetzt habe ich aber das Problem, dass dieser Display an einem Automaten hängt, und es ziemlich sicher ist, dass die Oma neben anderen Benutzern die den bedienen, das bestimmt nicht realisiert. Gibt es die Möglichkeit diese 300ms-Delay zu verkürzen ?
Hallo ToRi,
ich bin mir nicht sicher, ob das automatisch geht (glaube eher nicht. Vielleicht gibts aber was Fertiges. Ich bin kein WinForms-Profi und dein Code sieht mir nach WinForms aus). Wenn dus sowieso selbst machen musst, kannst du es natürlich verkürzen.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Ich weiß, dass man ToolStripDropDownItems
per ToolStripDropDownItem.ShowDropDown()
aufklappen kann...nachdem das ToolStripMenuItem
von dem ableitet würde ichs einfach mal ausprobieren (zb. in einem "Item Clicked" EventHandler oder so).
Habe mal einen TouchScreen angeschlossen und das getestet. In der listView lassen sich die Zeilen wie erwartet per Touch selectieren. Bleibe ich da mit dem Finger drauf, passiert allsrdings nix. muss man das noch zusätzlich einstellen oder freigeben? Habe nichts gefunden. Müsste ja nach 300ms auf Kontext-Menü umschalten, wenn ich das jetzt richtig verstanden habe.
Hallo ToRi,
muss man das noch zusätzlich einstellen oder freigeben? Habe nichts gefunden.
Bitte lies meinen letzten Beitrag. Um es noch deutlicher zu sagen: Es gibt keine Einstellung a la "EnableTouchScreenBehaviour", das setzt man und dann läufts.
Schau dich mal nach Bibliotheken um, eventuell gibts welche von Telerik für Windows Forms, ich weiss es nicht genau. Ich bin ziemlich sicher, dass du selber Hand anlegen musst. (Vielleicht weiss das aber ein WinForms-Profi hier im Forum besser 😃
Wir reden bei Touch ja auch von Gesten, von der Anzahl der Finger, die den Screen berühren und und und.
Die 300ms kenne ich vom Web & Mobile, die sind also völlig unabhängig jeder Technologie.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
@Coffeebean
Kannst ja die Lösung für den anderen Beitrag noch dazuschreiben, dann ist der nicht für die Katz.
for (int zahl = 0; zahl < listView1.Items.Count; ++zahl)
{
text = " " + listView1.Items[zahl].SubItems[0].Text; + listView1.Items[zahl].SubItems[2].Text;
e.Graphics.DrawString(text, drawFontArial10Regular, drawBrush, new RectangleF(x, y, width, height), drawFormatLeft);
y += e.Graphics.MeasureString(text, drawFontArial10Regular).Height;
}
Hi ToRi,
das Problem, dass dieser Display an einem Automaten hängt, und es ziemlich sicher ist, dass die Oma neben anderen Benutzern die den bedienen, das bestimmt nicht realisiert.
Dann ist ein Kontextmenü das falsche Konzept für deinen Anwendungsfall. Du kannst nicht einfach die Paradigmen von Benutzeroberflächen mit Tastatur- und Mausbedienung auf Benutzeroberflächen für Touch-Screens übertragen, und dann erwarten, daß jeder Benutzer damit zurechtkommt.
Weeks of programming can save you hours of planning
Das wäre dann die Lösung für das Kontext-Menü per linker Maustaste:
private void listView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (listView1.FocusedItem.Bounds.Contains(e.Location))
{
contextMenuStrip1.Show(Cursor.Position);
}
}
}
Hi MrSparkle,
ja danke, kinderleichte intuitive Bedienbarkeit steht im Fokus. Daher sind auch etwas unkonventionelle Lösungsansätze gefragt. Diese Lösung ist doch sehr einfach und sexy!! Übrigens, die Andere auch 😁