2011-10-20 11 views
7

Używam pola kombi w WinForm, ale kiedy został wybrany dowolny element w polu kombi, to wybrany kolor tła elementu jest niebieski. Chcę usunąć ten niebieski kolor tła (szczególnie przy ładowaniu formularza, próbowałem ustawić ostrość na inne formanty w formularzu, ale nie wyróżniono podkreślenia składanego), ale należy wybrać element.Zatrzymaj wyostrzenie kolorów wybranego elementu w ComboBox?

Czy ktokolwiek może pomóc w tym ...?

+0

Dość, że można po prostu ustawić wybrany indeks do -1, ale to było chwila. – asawyer

+1

, ale element powinien być wybrany ... – Dhana

+0

Czy używasz specjalnego motywu kolorystycznego w oknach? to nie powinno się zdarzyć na wspólnej kombinacji. Spróbuj usunąć to combo i dodaj nowe. @asawyer, który wyczyści kombinację, ale nie o to pyta OP;) – gbianchi

Odpowiedz

3

Wygląda na to, że jedynym sposobem na zrobienie tego jest podklasowanie kontrolki combobox.

Oto przykład, gdy ktoś to robi:

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/e234c4a7-0cf7-4284-a072-8152f7593002/

Istnieje prawdopodobnie więcej w internecie, aby poprowadzić Cię.

+0

Podany link wyjaśnia, w jaki sposób wyświetlić etykietkę narzędzi, gdy mysz unosi się nad elementem combobox. To nie jest odpowiedź na pytanie. – Dialecticus

2

Znalazłem coś nad this site

Tworzenie zegar i włączyć go w SelectedIndexChanged zdarzenia oraz w zegarze tylko dodać ComboBox1.Select(0,0) ten należy usunąć część selekcji, a następnie wyłączyć stoper. Zidentyfikować inne punkty wejścia gdzie można Enable timer ponownie

Fragment kodu

private void comboBox1_SelectedValueChanged(object sender, EventArgs e) 
{ 
    //Get the item selected in the combobox 
    ComboBox cbx = (ComboBox)sender; 
    int idx = cbx.SelectedIndex;  
    string s1 = cbx.SelectedItem.ToString(); 
    // Enable the time so that the Highlight can be removed 
    timer1.Enabled = true; 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    // Remove the Highlight 
    comboBox1.Select(0, 0); 
    // Disable timer 
    timer1.Enabled = false; 
} 
+0

comboBox1.Select (0, 0) - nie działa, ponieważ combobox to "dropdownlist", a tekst do edycji nie jest dozwolony .., – Dhana

+0

@Dhana Czy następnie działa ustawienie 'comboBox1.SelectionLength = 0'? – V4Vendetta

1

Nie jest łatwym rozwiązaniem dla Ciebie

private void myComboBox_Paint(object sender, PaintEventArgs e) 
{ 
    myComboBoxComboBox.SelectionLength = 0; 
} 

nadzieję, że to pomaga :)

+0

czy to nie spowoduje usunięcia selekcji? – elyashiv

2

jestem nie jest to duży użytkownik VB, a tylko gra z nim w Excelu, ale także miał ten problem, gdy dokonano selekcji w moim ComboBox. W końcu znalazłem sposób na pozbycie się niebieskiego podświetlania tekstu.

Mam ComboBox na UserForm. Wybierając ComboBox i przeglądając właściwości, po prostu zmieniłem ustawienie "HideSelection" na True. Można też do niego kod: ComboBox1.HideSelection = True

+0

To jest poprawne rozwiązanie. Chociaż twoja odpowiedź dotyczy VBA, jest taka sama dla WinForm z C# i VB.NET. Musisz ustawić właściwość 'HideSelection' na 'true'. Dziwne jednak; to powinno być domyślne. –

+0

@Cody Gray - Nie mogę znaleźć właściwości 'HideSelection' dla składnika ComboBox w Windows Forms. Istnieje dla TextBoxBase i kontrolek, które go dziedziczą, ale ComboBox tego nie robi. Co za wstyd, jak bym go naprawdę chciał! (Używam Visual Studio 2013 z .NET 4.5) – JonP

+0

@ hall Hmm, nie wiem o czym myślałem, kiedy napisałem ten komentarz kilka lat temu. Przypuszczalnie to działało dla mnie w tym czasie. Pomyślałem, że może ComboBox po prostu ukrywa metodę klasy bazowej, ale szybkie spojrzenie na Źródło Odniesienia sugeruje, że nie ma nawet takiej samej hierarchii jak TextBox. To faktycznie dziedziczy z ListControl, który dziedziczy z Control. Więc nie ma ukrytej właściwości do ustawienia. Być może możesz uzyskać dostęp do podstawowej kontroli TextBox, chociaż .NET nie zapewnia żadnego zarządzanego sposobu. Aby uzyskać uchwyt, musisz użyć P/Invoke. ... –

2

Aby rozwiązać ten sam próbowałem prawie wszystko:

  • ustawienie właściwości DropdownStyle do DropdownList
  • this.BeginInvoke(new Action(() => { comboBox1.Select(0, 0); }));
  • combobox1.SelectionLength = 0;
  • zmiana comboBox.TabIndex
  • Nie wypróbowano SendKeys.Send("{ESC}");, ponieważ nie jest to ponowne odpowiedzialne rozwiązanie

Nic nie pomogło. Może dlatego, że nie mam tekstu w moich elementach combobox, tylko obrazy. Jedyny stabilny i działa rozwiązaniem było przenieść fokus na innej kontrolki Label:

label.Focus(); 

Można również ukryć, że etykietę.

0

Natknąłem się na ten sam problem i po znalezieniu działającego rozwiązania miałem ten sam pomysł co @Vadim K.

Oto krótki przykład.

Pierwszym krokiem jest zmiana fokusu w zdarzeniu UI_Load.

Private Sub UI_Load(sender As System.Object, e As System.EventArgs) Handles Me.Load  
    Me.lblTitle.Focus() 
End Sub 

Następny krok to obsłużyć przypadek, gdy ktoś wybiera nową wartość

Private Sub comboExportDates_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboExportDates.SelectedIndexChanged 
     Me.lblTitle.Focus() 
End Sub 

działa prawidłowo dla mnie

Powiązane problemy