• 0

[C#] Problem with double-click on ListBox item


Question

Hi there,

I have a ListBox with a few items and at sometimes, when the ListBox only has a couple of items, you'll see a blank area after the last item because there are no more items to fill the ListBox.

Now, I've implemented the MouseDoubleClick event to get the index of the double-clicked item in the ListBox like this:

private void listNotes_MouseDoubleClick(object sender, MouseEventArgs e) {
	int noteIndex = listNotes.IndexFromPoint(e.Location);

	// DO SOMETHING ELSE...
}

However, if I double-click on that blank area, noteIndex will have the index value of the last item on the list.

I need to ignore this behavior. Any suggestions?

21 answers to this question

Recommended Posts

  • 0

You are right about something, SelectedIndex is much simpler. I don't know why I didn't use it in the first place... However, it does not solve the problem.

Double-clicking the blank area will return the index from the last item in the ListBox. Forget for a minute about the double-clicking, because that's not probably the problem. Let's say that event is not implemented, when you single-click any item in the ListBox, that item will be selected, but if you single-click on the blank area below the last item, that last item will be selected.

Conclusion, the last item is being selected when I click on the blank area, that's what I want to avoid...

  • 0
  Nazgulled said:
You are right about something, SelectedIndex is much simpler. I don't know why I didn't use it in the first place... However, it does not solve the problem.

Double-clicking the blank area will return the index from the last item in the ListBox. Forget for a minute about the double-clicking, because that's not probably the problem. Let's say that event is not implemented, when you single-click any item in the ListBox, that item will be selected, but if you single-click on the blank area below the last item, that last item will be selected.

Conclusion, the last item is being selected when I click on the blank area, that's what I want to avoid...

If I click the blank region in a listbox the last item is not selected and the selectedIndex returns -1. If there is a item selected from a previous single click then that selected index will be returned because it is the item selected, and the double click is based on clicking the listbox.

ways around would be to clear the Selected Items before you get the selectedIndex. make a copy of them before, and then re-assign them after you get the selectedIndex from the mouseClick.

That way, no interference from other events should be a problem.

  • 0

I don't understand what you are saying.

I cleared the selected items, clicked the blank area and the last item was selected...

One thing I haven't told you and maybe that's where is the problem... I'm using the KryptonListBox from the Krypton Toolkit, not the ListBox from Windows Forms. Maybe I should post this on the Krypton forums...

Thanks for all your help :)

  • 0
  Nazgulled said:
I don't understand what you are saying.

I cleared the selected items, clicked the blank area and the last item was selected...

One thing I haven't told you and maybe that's where is the problem... I'm using the KryptonListBox from the Krypton Toolkit, not the ListBox from Windows Forms. Maybe I should post this on the Krypton forums...

Thanks for all your help :)

From what I understand, you were saying that clicking a the blank area in the Listbox selects the last item. I can't recreate this behaviour using the 2008 Windows Forms version. Whether the Krypton one adds this is something to investigate.

The main problem I understand is that the double click event works, just that other event handlers and functions are getting in the way, such as single click, ect. To rectify this the only way I can think of would be to save the state of the object before the click, then clear down all selected properties, and just look at the one from the MouseEventArgs.

Then you can copy the data back in. That way, any items selected before the double click will be ignored. Of course this is catering for a very small number of possibilities..

  • 0

I don't really know what to say...

Please take a look at the attached solution. It's a very simple C# app with just the KryptonListBox. Open it, press F5 and click on the blank area. You'll see the last item getting selected...

WindowsFormsApplication1.zipFetching info...

  • 0
  Nazgulled said:
I don't really know what to say...

Please take a look at the attached solution. It's a very simple C# app with just the KryptonListBox. Open it, press F5 and click on the blank area. You'll see the last item getting selected...

Not played with C# for a while, but wouldn't you be able to hook into the ondoubleclick event on the items themselves, thus avoiding this issue?

  • 0
  DaveLegg said:
Not played with C# for a while, but wouldn't you be able to hook into the ondoubleclick event on the items themselves, thus avoiding this issue?

I tried to do this earlier but I don't its possible in C#. Played with the attached solution as well and can't really get anywhere with it.

  • 0

Oh its an custom made listbox. I played with it and the same happens so I changed "SelectionMode" to None and it works... and it doesnt. MouseDoubleClick event doesnt work only SelectedIndexChanged. I guess the creator of the control left some things out.

  • 0

I'm not sure what exactly is going on, but I tried a simple project with a listbox, a few items and subscribed to the MouseDoubleClick event, and this worked fine;

MessageBox.Show(listBox1.IndexFromPoint(e.Location).ToString());

Which is what you were using earlier, and it works on my machine. Regardless of previously selected items, if you double click in the extra space in the listbox (the area not occupied by a list item), it successfully returns -1 :s

  • 0

The author of Krypton Toolkit answered me with this:

  "Phil Wright" said:
I think the difference in behavior is because the Krypton list box is owner drawn and your standard one is not. But you can use code to work out the answer. Compare the returned item with the display rectangle of that item to ensure it really is under the mouse...

		private void kryptonListBox1_MouseDoubleClick(object sender, MouseEventArgs e)
		{
			int noteIndex = kryptonListBox1.IndexFromPoint(e.Location);
			if ((noteIndex >= 0) && (!kryptonListBox1.GetItemRectangle(noteIndex).Contains(e.Location)))
				noteIndex = -1;
		}

That would work for the MouseDoubleClick but I also have some buttons that perform actions on the selected listbox item. A single mouse click on the blank area also selects the last item. I also need to ignore this behavior... I've been trying a couple of things around the code above but haven't managed to do so, any ideas?

  • 0

I can override some if I created a class based on KryptonListBox, actually, already tried this but couldn't find a method that would help me with this problem, or I'm seeing how could I use that method to work around the problem...

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Ah .. lockout for suspicious activity. I bet they uploaded the SanDisk utility detected as malware
    • Microsoft 365 will soon disable outdated authentication protocols for file access by Usama Jawad On a fairly regular basis, Microsoft disables outdated protocols that are used to access its services. In the past few years, the company has deprecated Basic Auth in Exchange Online and cut access to Outlook for third-party apps relying on this protocol. Now, it has decided to get rid of old authentication protocols for file access across Microsoft 365 services. As reported by Bleeping Computer, Microsoft has posted a message on its Microsoft 365 Admin Center. Starting from mid-July 2025, the company will begin disabling legacy authentication protocols used to access files across Microsoft 365 and Office apps, SharePoint, and OneDrive. Essentially, applications or services which use the Relying Party Suite (RPS) or FrontPage Remote Procedure Call (FPRPC) will to perform browser-based authentication to perform open operations on Office files will no longer be able to do so. As expected, this is primarily being done to improve the cybersecurity posture of various services. Microsoft states that RPS can be brute-forced and phished with relative ease as it is fairly outdated. Similarly, FPRPC is typically used for remote web page authoring and it is susceptible to exploitation through various vulnerabilities too. As such, both of these protocols will be disabled by default starting from mid-July 2025, with the rollout of this change targeting completion by August 2025. The Redmond tech giant will update the protocol baseline by default without mandating any licensing changes for customers. In addition, once these modifications are rolled out, Microsoft 365 will require admin consent to get third-party access to files and sites. IT admins can view the guidance available here to configure admin consent workflows. Microsoft says that these changes align with the principles of its Secure Future Initiative (SFI). Earlier today, it announced the rollout of improved security defaults for Windows 365 citing the same reasons too.
    • It does and it can... I took an i3 board and upgraded it to my FX8350... no issues, just put in new drivers over the top that Windows didn't. Not the issue for me, (though I eventually did do a new install from 23H2 to 24H2)... I was on 22H2 at the time. The issue is activation. You may get hit with having to activate again.
  • Recent Achievements

    • First Post
      Fuzz_c earned a badge
      First Post
    • First Post
      TIGOSS earned a badge
      First Post
    • Week One Done
      slackerzz earned a badge
      Week One Done
    • Week One Done
      vivetool earned a badge
      Week One Done
    • Reacting Well
      pnajbar earned a badge
      Reacting Well
  • Popular Contributors

    1. 1
      +primortal
      708
    2. 2
      ATLien_0
      284
    3. 3
      Michael Scrip
      218
    4. 4
      +FloatingFatMan
      197
    5. 5
      Steven P.
      130
  • Tell a friend

    Love Neowin? Tell a friend!