Пока писал программу ProSticks на win form, столкнулся с такой задачей, когда на форме выделяешь listbox то элементы при наведении фокуса обводятся по границе, а так же если фокус направлен на listbox автоматически обводиться первый элемент. Для меня это показалось не эстетичным. В wpf там все намного проще в разметке достаточно было добавить:
1 |
<Setter Property="FocusVisualStyle" Value="{x:Null}"/> |
Но вот с формой пришлось малость повозиться. Во первых я добавил первый компонент именно listbox, это привело к тому, что при загрузке программы на него автоматически устанавливался фокус и рисовалась эта рамка. Но от этого было не сложно избавиться, добавлением строчки кода:
1 2 3 4 |
private void Form1_Load(object sender, EventArgs e) { listBox1.TabStop = false; } |
Но когда я мог выделить один из элементов, к примеру первый и щелкнуть по пустой области внутри listbox, у меня наводился фокус прорисовывалась пунктирная рамка у нижнего элемента, а выделенным оставался верхний.
Вот тут мне пришлось обратить внимание на winapi и создать свойство в listbox MouseDown. И вписать в него следующий код:
1 2 3 4 5 6 7 |
[DllImport("user32.dll")] private extern static IntPtr SetFocus(IntPtr hWnd); private void listBox1_MouseDown(object sender, MouseEventArgs e) { SetFocus(IntPtr.Zero); } |
Таким образом, когда мы зажимали кнопку мыши, возникало событие которое выполняло метод снятия фокуса с элемента. Теперь вы знаете как избавиться от пунктирной границы элемента в listbox. По сути это универсальный метод избавления от столь не желательной пунктирной рамки вокруг элементов.