Laden...

Combobox Readonly

Erstellt von Xqgene vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.136 Views
X
Xqgene Themenstarter:in
2.051 Beiträge seit 2004
vor 17 Jahren
Combobox Readonly

Folgendes Problem: Es gibt eine datengebundene Combobox. Style DropDownList. Nun der Benutzer soll die Combobox aufklappen, aber er darf keinen Eintrag auswählen können. Bzw. muss seine Auswahl einfach ignoriert werden. Also nur angucken.

irgendwie bin ich heute auf holzweg und finde nix passendes.

D
496 Beiträge seit 2005
vor 17 Jahren

für read only
this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

ist doch richtig!
mit dem ausgwählten wert brauchst du ja nichts machen wenn du nicht willst

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

X
Xqgene Themenstarter:in
2.051 Beiträge seit 2004
vor 17 Jahren

mit DropDownStyle = ComboBoxStyle.DropDownList erreichst du nur, dass du nix in die Combobox reinschreiben kannst.

du kannst aber immer noch ein Eintrag aus der Liste auswählen. und das darf nicht sein.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Xqgene,

ich denke, du musst auf das TextChanged-Event reagieren und den Wert zurücksetzten.

herbivore

X
Xqgene Themenstarter:in
2.051 Beiträge seit 2004
vor 17 Jahren

das geht leider nicht, denn, wie gesagt, das ist ein datengebundenes Control. das bedeutet, dass wenn ich in DataGridView scrolle, diese ComboBox-Events auch gefeuert werden. Es darf nur nicht durch den Benuter direkt in der Combobox geändert werden.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Xqgene,

dann musst du halt unterscheiden, ob es der Benutzer oder das Programm ist, dass den Event auslöst, z.B. in dem du vor programmgesteuerten Änderungen eine boolsche Variable auf true setzt und danach wieder auf false.

herbivore

X
Xqgene Themenstarter:in
2.051 Beiträge seit 2004
vor 17 Jahren

werd' ich wohl tun müssen. 🙁

thx@all

X
Xqgene Themenstarter:in
2.051 Beiträge seit 2004
vor 17 Jahren

hier ist genau das was ich gesucht habe (und nicht selbst programmieren wollte 😄): ReadOnlyCombobox

2.921 Beiträge seit 2005
vor 17 Jahren

Es geht auch so (vorweg: sorry, bin api-geschädigt... 😉):


   private bool m_bReadOnly = false;
        [DllImport("user32.dll", SetLastError = true)]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

        [DllImport("user32.dll", SetLastError = true)]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, IntPtr windowTitle);

        [DllImport("user32.dll")]
        private static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

        private const int EM_SETREADONLY = 0xCF;
        public CustomComboBox()
        {
            this.ReadOnly = true;
        }

        public bool ReadOnly
        {
            get { return m_bReadOnly; }
            set
            {
                m_bReadOnly = value;
                IntPtr ptrHwndEdit = FindWindowEx(this.Handle, IntPtr.Zero, "Edit", "");
                int nReadOnly = m_bReadOnly ? -1 : 0;
                SendMessage(ptrHwndEdit, EM_SETREADONLY, nReadOnly, 0);
            }
        }

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

X
Xqgene Themenstarter:in
2.051 Beiträge seit 2004
vor 17 Jahren

hallo dr4g0n76,

du hast wohl falsch mein problem verstanden. das was du hier mit dem API Code machst, kann ich durch einfaches DropDownStyle erreichen.

es ging mir darum, dass man keinen Eintrag aus der Comboliste auswählen kann.