[C#] Treeviewitem doubleclickevent

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben vandaag ook begonnen met wat C# te leren. Ik heb een form gemaakt met een zo'n split panel erin. In het linkerdeel zit een treeview en in het rechterdeel een datagridview. Nu vind ik alleen geen manier om de doubleclick-event juist aangeroepen te krijgen ...

Ik heb de code van hier geprobeerd, maar er gebeurt gewoon niets als ik dubbelklik op een element :'(

C#:
1
2
3
4
5
6
7
8
9
10
11
        private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            //
            // Get the selected node.
            //
            TreeNode node = treeView1.SelectedNode;
            //
            // Render message box.
            //
            MessageBox.Show(string.Format("You selected: {0}", node.Text));
        }


Iemand enig idee?

Dit topic is een merge van een nieuw topic en replies uit De Devschuur Coffee Corner welke daar niet hoorde. De posts lijken langs elkaar te lopen maar dat komt dus omdat 2 discussies naar 1 zijn samengevoegd. Effe koppie erbij houden als je dit probeert te volgen dus :P

[ Voor 21% gewijzigd door RobIII op 21-12-2010 22:36 ]


Acties:
  • 0 Henk 'm!

  • DoDo
  • Registratie: Juli 2001
  • Laatst online: 00:46
Zitten in je treeview niet TreeViewItems en moet je daar het event niet aanhangen?

Nu heb je de eventhandler op je treeview gezet, dus als je op de witte ruimte in je treeview dubbel klikt zou de eventhandler af moeten gaan.

[ Voor 32% gewijzigd door RobIII op 21-12-2010 22:36 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
DoDo schreef op dinsdag 21 december 2010 @ 21:16:
Nu heb je de eventhandler op je treeview gezet, dus als je op de witte ruimte in je treeview dubbel klikt zou de eventhandler af moeten gaan.
Zelf dat doet ie niet.

In vb.net is dit toch gemakkelijker. Dan kan je in VS gewoon rechtsboven de bijhorende event aanklikken. Waarom is die mogelijkheid er niet bij C#? :'(


Hieronder de vb.net code:

Visual Basic .NET:
1
2
3
4
Private Sub TreeView1_NodeMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseDoubleClick
        Dim node As TreeNode = TreeView1.SelectedNode
        MessageBox.Show(String.Format("You selected: {0}", node.Text))
    End Sub


... maar in C# dus weer andere code (duh, maar ik bedoel andere eventnaam) blijkbaar ... :(

edit: Ik maak dadelijk een eigen topic aan ;)
edit 2: There you go: Verwijderd in "\[C#] Treeviewitem doubleclickevent"

[ Voor 17% gewijzigd door RobIII op 21-12-2010 22:36 ]


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 13-09 15:32

Sebazzz

3dp

Behalve wat RobIII zegt:

Afbeeldingslocatie: http://tweakers.net/ext/f/s0nDqjkU4JPOae6N6J8IDaki/full.png :? Is er ook in C# hoor.

En http://msdn.microsoft.com...nodemousedoubleclick.aspx :?

[ Voor 32% gewijzigd door RobIII op 21-12-2010 22:36 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • -Sander1981-
  • Registratie: November 2000
  • Laatst online: 22-04-2020
Nee hoor, zelfde event, zelfde werkwijze. Klik een treeview, en in de properties kun je bij events dit event kiezen. ;)

Edit: refreshen voor ik antwoord, dus :)

[ Voor 34% gewijzigd door RobIII op 21-12-2010 22:36 ]

I don't have a solution; but I do admire the problem.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dag iedereen,

Ik ben pas begonnen met het leren van C#.
Mijn form bestaat uit een splitcontainer. Aan de linkerzijde zit een treeview, en wanneer op een childnode uit de treeview wordt gedubbelklikt, moet de data aan de rechterzijde aangepast worden.

Nu:

Ik volg dit stukje code, maar het event wordt niet opgeroepen wanneer ik dubbelklik.

C#:
1
2
3
4
5
6
7
8
9
10
11
        private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            //
            // Get the selected node.
            //
            TreeNode node = treeView1.SelectedNode;
            //
            // Render message box.
            //
            MessageBox.Show(string.Format("You selected: {0}", node.Text));
        }


In VB.NET is het mij wel al gelukt met onderstaande code:

Visual Basic .NET:
1
2
3
4
    Private Sub TreeView1_NodeMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseDoubleClick
        Dim node As TreeNode = TreeView1.SelectedNode
        MessageBox.Show(String.Format("You selected: {0}", node.Text))
    End Sub


Bijgevolg heb ik dan geprobeerd om de methodnaam wat aan te passen, maar dit ook zonder resultaat:

C#:
1
2
3
4
        private void treeView1_NodeMouseDoubleClick(object sender, MouseEventArgs e)
        {
            //bla bla
        }


Iemand enig idee wat het event is dat ik zoek, en hoe ik gemakkelijk een overzicht kan krijgen van alle events per control (in Visual Studio is dit wel mogelijk met vb.net, maar niet met C#?)

Screenie:

Visual Studio: CScherp
Afbeeldingslocatie: http://imgur.com/fGsEU.png

Visual Studio VB.Net
Afbeeldingslocatie: http://i.imgur.com/jFDVr.png

Acties:
  • 0 Henk 'm!

Verwijderd

ff een heel snugger vraagje: heb je wel de event aan de treeview gekoppeld?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks, zo is het inderdaad. En dat van dat bliksemschichtje wist ik niet, ik kijk altijd in die balk vanboven.

Visual Studio: CScherp
Afbeeldingslocatie: http://imgur.com/fGsEU.png

Visual Studio VB.Net
Afbeeldingslocatie: http://i.imgur.com/jFDVr.png

[ Voor 12% gewijzigd door RobIII op 21-12-2010 22:37 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dat of in de Public frmMain() ff dit zetten:

C#:
1
treeView1.NodeMouseDoubleClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseDoubleClick);


Doet trouwens precies hetzelfde, maar wat RobIII hierboven zegt toont het dan ook nog in de Design mode. Waar je mijn mogelijkheid kan gebruiken om een annonieme methode er aan te hangen :p

C#:
1
treeView1.NodeMouseDoubleClick += (s, args) => { /*  doe iets */ };

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Problem solved:

Gewoon op het bliksemschichtje geklikt en daar het juiste event gekozen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zo; tot hier is 't puinhoop. Vanaf hier zou er weer logica in moeten zitten :X 8)7

Ach; het had erger kunnen zijn :+

[ Voor 114% gewijzigd door RobIII op 21-12-2010 22:38 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 13-09 15:32

Sebazzz

3dp

Waarom heet je class (en dus ook je constructor) 'frmMain'? In C# is het de conventie om classes pascalcased te schrijven. Beginnen met een hoofdletter dus en ieder opvolgend woord schrijven met een hoofdletter.
Verwijderd schreef op dinsdag 21 december 2010 @ 22:31:
Gewoon op het bliksemschichtje geklikt en daar het juiste event gekozen.
Neemt niet weg dat het handig is om te weten hoe je handmatig met events werkt in C# ;)

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Sebazzz schreef op dinsdag 21 december 2010 @ 23:25:
Waarom heet je class (en dus ook je constructor) 'frmMain'? In C# is het de conventie om classes pascalcased te schrijven. Beginnen met een hoofdletter dus en ieder opvolgend woord schrijven met een hoofdletter.
Los van 't feit dat hungarian ook niet echt volgens de guidelines/conventies is* ;)

Maar smaken verschillen; en deze stijl Hungarian (zoals 't eigenlijk ooit bedoeld was) is dan wel weer 't overwegen waard.

[ Voor 30% gewijzigd door RobIII op 22-12-2010 00:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sebazzz schreef op dinsdag 21 december 2010 @ 23:25:
Waarom heet je class (en dus ook je constructor) 'frmMain'? In C# is het de conventie om classes pascalcased te schrijven. Beginnen met een hoofdletter dus en ieder opvolgend woord schrijven met een hoofdletter.
Wij hebben vorig jaar op school geleerd dat je een form aanduid met het voorvoegsel frm, hetzelfde geldt voor de controls. Vb: Textbox --> txtNaam, datagridview --> dgvKlanten, ...

Voor de rest probeer ik me wel aan de PascalCasing te houden ;)
Sebazzz schreef op dinsdag 21 december 2010 @ 23:25:
[...]

Neemt niet weg dat het handig is om te weten hoe je handmatig met events werkt in C# ;)
Zou ik inderdaad beter eens bekijken. In vb.net blijkt dit toch wat gemakkelijker.

[ Voor 25% gewijzigd door Verwijderd op 22-12-2010 13:12 ]


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 13-09 15:32

Sebazzz

3dp

Verwijderd schreef op woensdag 22 december 2010 @ 13:11:
[...]


Wij hebben vorig jaar op school geleerd dat je een form aanduid met het voorvoegsel frm, hetzelfde geldt voor de controls. Vb: Textbox --> txtNaam, datagridview --> dgvKlanten, ...
Maar conventies verschillen natuur?ijk per framework en taal.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Verwijderd schreef op woensdag 22 december 2010 @ 13:11:
[...]


Wij hebben vorig jaar op school geleerd dat je een form aanduid met het voorvoegsel frm, hetzelfde geldt voor de controls. Vb: Textbox --> txtNaam, datagridview --> dgvKlanten, ...

Voor de rest probeer ik me wel aan de PascalCasing te houden ;)


[...]


Zou ik inderdaad beter eens bekijken. In vb.net blijkt dit toch wat gemakkelijker.
Dat is dikke poep, maar dat leer je later dan weer als je het in de echte wereld gaat gebruiken en leest waar Hungarian oorspronkelijk voor bedoeld was, namelijk dezelfde types maar dan toch iets anders. De gast die het verzon gebruikte het voor strings die al dan niet escaped waren.

Je zou gewoon een descriptive naam moeten gebruiken waar het type niet in zit.

Want als je een button hebt en je wilt daar later toch een klikbaar label van maken, dan moet je weer hernoemen en refactoren. Niet dat dat refactoren heel moeilijk is met een fatsoenlijke IDE die dat automatisch kan, maar toch.

Het niet gebruiken van Hungarian forceert je ook om betere namen te bedenken. Als iemand anders met een andere programmeerachtergrond jouw code leest en niet bij voorbaat weet dat bs voor BindingSource staat, dan heeft hij meer aan een naam als customerSource dan bsCustomer.

Ik gebruik trouwens voor alle private/protected variabelen en methoden camelCasing en voor alles wat public/internal is, gebruik ik PascalCasing. Ik heb me wel eens verdiept in naming conventions, maar daar denkt iedereen toch het zijne van. Resharper wil bijvoorbeeld zoveel mogelijk met een hoofdletter en houdt niet van underscores, maar als je in VS een event-methode aanmaakt door te dubbelklikken op een control, krijg je een camelCased methode met underscore.


PS: Ik moet toegeven dat je in de praktijk soms niet ontkomt aan een type-aanduiding. Jouw datagridview zou je liever table willen noemen, maar dan krijg je een verkeerde associatie met een database. In dat geval zet ik het type er dan nog altijd liever achter dan voor. MainForm ipv frmMain dus.

[ Voor 7% gewijzigd door Davio op 22-12-2010 16:13 ]

Pagina: 1