Hallo Zusammen,
ich möchte den Text von einen Knoten (via Shortcut Strg+C) kopieren. Wenn ich aber einen Knoten im TreeView selektiere und dann Strg+C drücke, das Ereignis liefert mir nicht die gewünschte Ergebnis (siehe unten). Ich habe sogar eine Ausgabe eingebaut, um zu sehen was in dem Objekt-KeyEventArgs steht, egal was gedrückt wird. Hier unten steht ein Beispiel für Strg+C und dort kann man sehen, dass nur die Taste Strg erkannt wird und die Taste 'C' wird einfach ignoriert.
Könnte mir jemand helfen warum es so ist?
private void treeView1_KeyDown(object sender, KeyEventArgs e)
{
System.Console.WriteLine(e.KeyCode.ToString() + " " + e.Control + " " + e.KeyData.ToString() + " " + e.KeyValue.ToString());
if (e.Control & (e.KeyCode == Keys.C))
{
}
}
Ausgabe:
ControlKey True ControlKey, Control 17
ControlKey True ControlKey, Control 17
ControlKey True ControlKey, Control 17
ControlKey True ControlKey, Control 17
Grüße
PS: übrigens, ich habe hier im Forum keine Lösung dafür gefunden. Nicht dass Ihr meint, ich habe die "Suche" nicht benutzt.
So müsste es funktionieren:
// im konstruktor
this.treeView.CommandBindings.AddRange(this.CreateCopyPasteCutCommandBindings());
protected ICollection CreateCopyPasteCutCommandBindings()
{
return new List<CommandBinding>
{
new CommandBinding(
ApplicationCommands.Copy,
(s, e) => this.MyCopy(),
(s, e) => e.CanExecute = this.MyCanCopy()),
new CommandBinding(
ApplicationCommands.Cut,
(s, e) => this.MyCut(),
(s, e) => e.CanExecute = this.MyCanCut()),
new CommandBinding(
ApplicationCommands.Paste,
(s, e) => this.MyPaste(),
(s, e) => e.CanExecute = this.MyCanPaste())
};
}
Edit: sorry - das wäre die Lösung für WPF 😉
(Hallo martin0, du hast dich im Sub-Forum vertan hier ist WinForms, nicht WPF 😉
Und hallo beck's,
ich hatte es mal so gelöst:
void textBox_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if(e.KeyChar == 0x03) // CTRL+C
// ...
}
(der Trick ist, daß die Strg+<Buchstabe> im KeyPress als 1 (0x01) bis 26 (0x1A) übergeben werden).
Im Internet habe ich auch noch für KeyDown
if (e.KeyData == (int)Keys.Control + (int)Keys.C)
gefunden.
void textBox_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if(e.KeyChar == 0x03) // CTRL+C // ... }
(der Trick ist, daß die Strg+<Buchstabe> im KeyPress als 1 (0x01) bis 26 (0x1A) übergeben werden).
Hallo, leider es funktioniert nicht, die Methode wird erst dann aufgerufen, wenn ich nur eine Tase ohne "STRG" drücke. Wenn aber STRG+C gedrück wird, dann wird das Event KeyPress nicht aufgerufen.
Das andere Beispiel ist nicht mal kompilierbar. Es kann doch in .NET nicht so schwierig sein einen Text aus TreeView oder TextBox zu kopieren.
Grüße
Hi! Probier mal folgendes:
private void treeView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)
Debug.WriteLine("Works!");
}
Das gleiche auch für Textbox
😃
mfg Sanny
Servus,
versuchs doch mal 2 '&' und nicht mit einem 😉
private void treeView1_KeyDown(object sender, KeyEventArgs e)
{
System.Console.WriteLine(e.KeyCode.ToString() + " " + e.Control + " " + e.KeyData.ToString() + " " + e.KeyValue.ToString());
if (e.Control && (e.KeyCode == Keys.C))
{
}
}
[edit]
Die Erklärung warum: Operator & (C#-Referenz)
[/edit]
private int Main()
{
string programmingSkills = getMySkills("programming")
return = 1;
}
@Sanny: keine Ahnung aber bei mir funktioniert es nicht. Nachdem ich strg-Taste gedrück habe wird das Event treeView1_KeyDown zyklisch ausgelöst aber nach dem ich noch zusätzlich die Taste 'C' drücke, dann wird das Event nicht mehr abgefeuert, d.h. die 'C'-taste wird nicht mehr erkannt.
Hi Becks,
Poste mal dein Code...
Bei mir funktionierts einwandfrei...
Hat Smou's Beitrag dich weitergebracht?
mfg Sanny
Hi Becks,
Poste mal dein Code...
Bei mir funktionierts einwandfrei...
Hat Smou's Beitrag dich weitergebracht?
mfg Sanny
Mein Code habe ich eigentlich oben gepostet. Bis jetzt habe ich alle Vorschläge ausprobiert und es will nicht funktionieren. Übrigens ich benutze .Net 4.0
private void treeView1_KeyDown(object sender, KeyEventArgs e)
{
System.Console.WriteLine(e.KeyCode.ToString() + " " + e.Control + " " + e.KeyData.ToString() + " " + e.KeyValue.ToString());
if (e.KeyCode == Keys.C)
{
}
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)
{
System.Console.WriteLine("Works!");
}
//if (e.Control & (e.KeyCode == Keys.C))
//{
//}
}
private void treeView1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 0x03)
{
}
}
Was gibt er dir denn als Keychar zurück wenn du strg + C gedrück hälts und keypress registriert hast?
private int Main()
{
string programmingSkills = getMySkills("programming")
return = 1;
}
Was gibt er dir denn als Keychar zurück wenn du strg + C gedrück hälts und keypress registriert hast?
genau hier liegt der Hund begraben, eben nichts. Nach dem ich nur _strg _ gedrückt halte gibt er _:::
Die Ausgabe basiert auf diesem Code:
private void treeView1_KeyDown(object sender, KeyEventArgs e)
{
System.Console.WriteLine(e.KeyCode.ToString() + " " + e.Control + " " + e.KeyData.ToString() + " " + e.KeyValue.ToString());
}
Sei so freundlich und versuch es mit keyPress und nicht mit KeyDown. 😉
private void treeView1_KeyPress(object sender, KeyPressEventArgs e)
{
System.Console.WriteLine(e.KeyCode.ToString() + " " + e.Control + " " + e.KeyData.ToString() + " " + e.KeyValue.ToString());
if (e.KeyChar == 0x03)
{
System.Console.WriteLine("Works!");
}
}
private int Main()
{
string programmingSkills = getMySkills("programming")
return = 1;
}
Sei so freundlich und versuch es mit keyPress und nicht mit KeyDown. 😉
hier ist noch schlimmer 😉 die 'STRG'-taste wird nicht geloggt, d.h. das Event wird nicht abgefeuert auch nicht, wenn ich STRG+C drücke. Es wird nur dann aufgerufen, wenn ich nur die Taste 'C' drücke ?( X( es schaut so aus, dass die STRG - Taste Probleme verursacht, bzw. .NET 4.0 und Windows XP. Unten steht der Code, wie ich es ausprobiert habe:
private void treeView1_KeyPress(object sender, KeyPressEventArgs e)
{
System.Console.WriteLine(e.KeyChar);
if (e.KeyChar == 0x03)
{
System.Console.WriteLine("Works!");
}
}
Ausgabe: c
Also ich weiß nicht was du da bastelst aber genau dein code wirft bei mir "Works" in die Console....
private int Main()
{
string programmingSkills = getMySkills("programming")
return = 1;
}
Also ich weiß nicht was du da bastelst aber genau dein code wirft bei mir "Works" in die Console....
hmmm.....ich versuche da weiter zu suchen.
Erstell dir eine eigene TreeView Klasse, die von TreeView erbt und dann:
Control verliert Focus durch Pfeiltasten...
> Codejunky <
Hallo beck's,
vermutlich wird Strg+C (also Copy/Zwischenablage) als Kommando interpretiert (ProcessCmdKey), nicht als Eingabe (KeyDown/Press/Up).
herbivore
Hallo beck's
sorry, meinte
if (e.KeyValue == (int)Keys.Control + (int)Keys.C)
Hast du evtl. ein Menü bei dir definiert, wo du Ctrl+C als ShortCut eingetragen hast? (Dann wird dieses immer ausgelöst und es kommt nie im Control an!)
Oder hast du Form.KeyPreview gesetzt (d.h. 'true') und fragst im Form-KeyEvent schon diese Tastenkombi ab, bzw. gibst diese nicht weiter?
Ich würde dir aber jetzt auch mal raten, ein neues Testprojekt aufzusetzen und diese Funktionalität alleine auszuprobieren (und dann nachher den Fehler in deinem eigentlichen Programm zu suchen)!