Treeview źle działa

0

Mam problem z C# + Treeview z checkboxami. Jak szybko zaznacza/odznaczam checkboxy, to w pewnym momencie Treeview jest źle wyświetlany:

user image

Wszystkie trzy mają node.Checked == true, a jak widać na obrazku pierwszy wygląda na node.Checked == false. Próbowałem tree.Refresh(), jakieś Hide() i Show(), ale to nie pomaga. Jakiś pomysł co zrobić?

0

Pokaż kod.

0

Tak właściwie ten błąd jest nawet... bez żadnego kodu.

Treeview z checkboxes = true i jednym node.
Label1 do wyświetlania stanu.
Button żeby upewnić się jaka jest zawartość.

Jak kliknę kilkukrotnie na checkboxa, to wyświetla błędnie.

 
namespace TreeViewbug
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = treeView1.Nodes[0].Checked.ToString();
        }

        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            label1.Text = treeView1.Nodes[0].Checked.ToString();
        }
    }
}

0

odkryłeś błąd w obiekcie powszechnie używanym od niemal dwudziestu lat? ;]

Click() wykonuje się raz po podwójnym kliknięciu, a checkbox zmienia stan w takim momencie dwukrotnie. podepnij się jeszcze pod DoubleClick.

0

Ale co podpiąć pod doubleclicka? Ja chcę żeby checkbox odpowiadał jego zawartości, bo czasami się "desynchronizuje", w .zip masz .avi w którym widać o co mi chodzi. W pewnym momencie Node0 jest "odznaczony", a jego zawartość Checked == true.

0

wszystko jest ok tylko po podwójnej zmianie po podwójnym kliknięciu nie wyświetlasz stanu faktycznego. tyle.

0

Wyświetlam stan faktyczny, ponieważ naciskam button który ma za zadanie zmienić label.

Po dodaniu drugiego buttona który wykonuje RecreateHandle() treeview wyświetla stan (zgodny z label). Z tym że nie mam ochoty wykonywać RecreateHandle() po każdym kliknięciu...

0

Serio, wiem że to nie jest nic wielkiego, ale mnie to wkurza... Zaraz wyjeżdżam na jakiś czas, więc dam jeszcze raz kod + filmik.

 
namespace TreeViewbug
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "button1 click " + treeView1.Nodes[0].Checked.ToString();
        }

        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            label1.Text = "afterCheck " + treeView1.Nodes[0].Checked.ToString();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            RecreateHandle();
        }

        private void treeView1_MouseClick(object sender, MouseEventArgs e)
        {
            this.Refresh();
        }

    }
}

Albo ja popełniam jakiś głupi błąd i pomijam jakiś drobiazg, albo ta kontrolka jest zbugowana...

0

Popełniasz głupi błąd poprzez całkowite zlanie postów ŁF. Faktycznie to bug :o.

http://msdn.microsoft.com/en-US/library/ms171542%28v=vs.110%29.aspx

Following is the order of events raised for a double mouse-button click:

MouseDown event.
Click event.
MouseClick event.
MouseUp event.
MouseDown event.
DoubleClick event. (This can vary, depending on whether the control in question has the StandardDoubleClick style bit set to true. For more information about how to set a ControlStyles bit, see the SetStyle method.)
MouseDoubleClick event.
MouseUp event.
0

o kurczę. tym razem kompletnie nie miałem racji, zwracam honor w prawie całej rozciągłości. to zachowanie to faktycznie błąd w kontrolce.
a dlaczego zwracam niecały honor? bo mogłeś zrobić to co ja przed chwilą: użyć google. pierwszy link po wpisaniu hasła TreeView checkbox error to http://anandopaul.wordpress.com/2010/01/01/c-treeview-checkbox-double-click-bug-for-vista-and-win7/

w załączniku kod z zaimplementowanym rozwiązaniem z linka.

0

Okej, dzięki za pomoc i wyjaśnienie sprawy. Pamiętam że raz coś próbowałem z tym WndProc, ale pewnie wieczorem było i źle przetestowałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1