Treeview: nodeClick con il tasto ctrl

giovedì 31 gennaio 2008 - 18.38

Giovanni_3478 Profilo | Senior Member

Ciao

(VisualStudio2008 e C#)

Ho un treeview:
cliccando su un nodo vorrei effettuare delle operazioni;
quindi uso
protected void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
prova = e.node.Text;
}
E fin qui ci siamo.

Ma vorrei che cliccando premendo ctrl succede qualcosa
e cliccando ctrl +sft succede altro.

Come potrei ottenere un risultato del genere?

aiedail92 Profilo | Expert

Ciao

Usa la proprietà ModifierKeys:

private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (ModifierKeys == Keys.Shift) { MessageBox.Show("MAIUSC"); } else if (ModifierKeys == (Keys.Shift | Keys.Control)) { MessageBox.Show("CTRL + MAIUSC"); } }

Luca

Giovanni_3478 Profilo | Senior Member

Perfetto, funziona

Thanks

Giovanni_3478 Profilo | Senior Member

Ciao

Evito di aprire un altro post

Se invece di usare una ModifierKeys quindi alt ctrl o alt
volessi usare ad esempio F2,

Come dovrei fare?

aiedail92 Profilo | Expert

Ciao

Mi sa che non esiste una proprietà come ModifierKeys, quindi credo che vadano intercettati gli eventi keydown e keyup per impostare una variabile Keys che indica i tasti premuti (su keydown la imposti con le prorpietà dell'argomento e, e su keyup la imposti su Keys.None) e poi controlli al momento del click se il tasto è premuto allo stesso modo di come facevi prima.

Luca

Giovanni_3478 Profilo | Senior Member

Ciao

Ho provato a creare il codice come mi avevi suggerito.


Ho creato una proprietà
private Keys _tastoF2;
public Keys TastoF2
{
get
{
return _tastoF2;
}
set
{
_tastoF2 = value;
}
}
Poi un handle
protected void treeView1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F2 && treeView1.SelectedNode!=null)
{
TastoF2= Keys.F2;
}
}
Al click sul nodo:
protected void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (TastoF2 == Keys.F2)
{
treeView1.labelEdit = true;
}

Dicevi questo?

In pratica io vorrei che premendo F2, il nodo selezionato entrasse in modalità
edit, un pò come avviene per l'eploraRisorse di Windows.

Con il codice di sopra però io devo selezionare il nodo,
premere F2
e poi dopo cliccare;
io invece voglio selezionare il nodo e
premere F2.

Ho provato con
protected void treeView1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F2 && treeView1.SelectedNode!=null)
{
treeView1.LabelEdit = true;
treeView1_NodeMouseClick(treeView1, new TreeNodeMouseClickEventArgs(treeView1.SelectedNode, MouseButtons.Left, 1, treeView1.SelectedNode.Bounds.X, treeView1.SelectedNode.Bounds.Y));
}
}
ma niente da fare.
Ho cercato di attivare l'evento click senza cliccare sul mouse.

aiedail92 Profilo | Expert

Scusa, avevo capito male io. Pensavo che avessi bisogno di controllare se assieme al click fosse premuto anche il tasto F2 (come col tasto Ctrl).

Allora fare quello di cui hai bisogno è ancora più semplice:

Intercetti l'evento TreeView.KeyDown, lì fai il controllo su tasto premuto e quindi decidi se attivare la modifica del testo:

private void treeView_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.F2) { treeView.LabelEdit = true; treeView.SelectedNode.BeginEdit(); } }

Luca

Giovanni_3478 Profilo | Senior Member

Funziona grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5