Kombinatsiyadagi matnni qanday bekor qilish kerak

Ma'lumotlarim kalit-qiymat juftlarining ro'yxati bilan bog'langan kripton ochqich qutisi bor. Nima sodir bo'lsa, tanlangan elementni kodga qo'yganimda, u matnni ta'kidlaydi. Buni qanday qilib oldini olishim yoki matndan olib tashlashim mumkin?

Men quyidagilarni sinab ko'rdim:

// 1
combo.Select(0,0);
// 2
combo.Focus();
anotherControl.Focus();
// 3
combo.SelectionStart = 0;
combo.SelectionLength = combo.Text.Length;
// 4 
combo.SelectionStart = combo.Text.Length;
combo.SelectionLength = 0;

Hech narsa ishlamayapti. Har qanday yordamni qadrlaymiz.

16

12 javoblar

Men buni nazorat qilish/oynamdagi OnPaint voqeasini bekor qilish va bajarish bilan shug'ullana boshladim

combobox1.SelectionLength = 0;
6
qo'shib qo'ydi
Buni qilayotib, matnni keyinchalik ta'kidlay olmayman. OnPaint usuli tez-tez chaqirilganda, u har safar tanlanmaydi
qo'shib qo'ydi muallif Martin Fernau, manba

Men ishlaydigan bir yechim topib olgan bo'lardim:

Agar ariza ishlatilayotgan bo'lsa, arizaning ko'rsatilishiga obuna bo'ling.

YoKI

Agar UserControl foydalanayotgan bo'lsangiz (men kabi) VisibleChanged hodisasiga obuna bo'lishingiz mumkin.

Agar shunday bo'lsa, siz quyidagilarni amalga oshirishingiz mumkin:

        foreach (ComboBox cbo in (this.Controls.Cast().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
        {
            cbo.SelectionLength = 0;
        }

Bir tomondan:

Men ComboBoxs ni tekshiruvga qo'shgan foydalanuvchi tekshiruvi uchun buni amalga oshirishga majbur bo'ldim va keyinchalik ularni hajmini dinamik ravishda belgilash uchun zarur bo'lgan. O'lchamni belgilash OPning duch kelganligini ta'kidlashga olib keldi.

3
qo'shib qo'ydi
Bu men uchun ham ishladi. Ajoyib
qo'shib qo'ydi muallif Martin Fernau, manba

Buni sinab ko'ring

combo.SelectedText = String.Empty;

Muammoingizni e'tiborga olganda: ( MSDN >)

Birgalikda qutisi markazlashtirilganda, tanlov nuqtasi   matnning boshlanishi va tanlangan matn tanlanmagan bo'ladi.

Juda g'alati. nima uchun quyidagi ishlamadi:

anotherControl.Focus(); 
2
qo'shib qo'ydi
Ishlamang. Balki bu javob eski C# uchun dolzarb.
qo'shib qo'ydi muallif Gurebu Bokofu, manba
Rahmat, lekin ishlamadi
qo'shib qo'ydi muallif MattBH, manba
u yuklanganidan keyin ustiga bosganimda g'aroyib, keyin esa boshqa mavzuga kelsa u markazlashtirilgan narsa ishlaydi! ??! u menga yong'oqni olib keladi
qo'shib qo'ydi muallif MattBH, manba
U bog'langan, lekin keyin men ro'yxatdan bir narsani tanlayman. Bu asosan JB dan oldindan to'ldirilgan ariza, shuning uchun men to'g'ri elementni tanlashim kerak.
qo'shib qo'ydi muallif MattBH, manba
Sizning combobox ma'lumotlar bazasiga bog'langanmi? Ha bo'lsa, SelectedIndex = -1 harakat qilib ko'ring
qo'shib qo'ydi muallif sll, manba

Bu qanchalik yoshligidan qayg'uraman. Biz ma'lumot bazasini yaratmoqdamiz.

D5 dan foydalanaman (va ehtimol, avvalgi versiyalar bir xil). Siz quyidagilarni ishlatishingiz kerak:

Combobox.SelLength :=  0; 

Bundan tashqari, agar bu ishlamasa, bu quyidagicha amalga oshiriladi: Default Style (csDropDown) dan saqlaning.   Va uni quyidagicha belgilang:

Combobox.Style := csDropDownList; 

Alex taklif qilgan.

Rahmat. Ishlar ajoyib!

1
qo'shib qo'ydi
D5? Delphi-ni nazarda tutyapsizmi? [C #] tagli savolda?
qo'shib qo'ydi muallif jean, manba
Meni kechiring, lekin bu erda ko'rsatilgan sintaksik hech qanday C #ga o'xshamaydi.
qo'shib qo'ydi muallif kayess, manba

Men shunday qilaman:

private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
     this.ActiveControl = cancelButton;
}
0
qo'shib qo'ydi
this.ActiveControl = null; ham ishlaydi.
qo'shib qo'ydi muallif Alden, manba

SelectedIndexChanged tadbirida 10 millisekunddan keyin faqat bir marta bajariladigan taymerni qo'shing.

new System.Threading.Timer((s) =>
            {
                comboBox1.Invoke(new Action(() =>
                {
                    comboBox1.Select(0, 0);
                }));
            }, null, 10, System.Threading.Timeout.Infinite);
0
qo'shib qo'ydi

Men bu savolni berganingizdan beri bilaman. Lekin bu erda nima qilishingiz mumkin

combo.selectedindex = -1;
0
qo'shib qo'ydi
Rahmat, lekin tanlangan elementni o'zgartirmoqchi emasman, faqat matnni ajratib ko'rsatishni istayman.
qo'shib qo'ydi muallif MattBH, manba

Siz foydalanuvchining ComboBox qiymatini o'zgartirishga imkon berishi yoki olmasligi haqida aniq ko'rsatmadingiz. Aks holda ComboBoxning DropDownStyle kodi ComboBoxStyle.DropDownList ga o'rnatilishi kerak. Shunday qilib, ComboBox faqat mavjud qiymatlarni tanlashga ruxsat beradi, foydalanuvchilar yangi qiymatlarni yozishga qodir emas va matn hech qachon ta'kidlanmaydi.

0
qo'shib qo'ydi

bu 3 qator menga yordam berdi:

cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;

TabIndex birinchi bo'lishi kerak emas, shuning uchun formadagi birinchi element emas

0
qo'shib qo'ydi
Men OP bilan bir xil muammoga aylandim va bu yordam bermadi
qo'shib qo'ydi muallif Martin Fernau, manba

Orqa fonda nima qilishingiz mumkinligiga ishonchingiz komil emas, ya'ni ishdan bo'shatilgan hodisalar va hk. Biroq, tanlangan parametrni o'zgartirgan holda, siz boshqaControl.Select() ni qo'shishingiz mumkin.

Bu kerak :)

0
qo'shib qo'ydi
Yo'q, ishlamadi.
qo'shib qo'ydi muallif MattBH, manba

Ushbu kodni yaratilgan hodisaga joylashtirishingiz yoki bitta Combo Box matnini bekor qilishni xohlagan joyga bosishingiz kerak

ComboBox1.SelectedItem = null;
0
qo'shib qo'ydi
ha! yaxshi, rahmat @ shivam
qo'shib qo'ydi muallif Murtuza Khan, manba

Mening tanlovimda kattalashtirishdan keyin paydo bo'ldi. Buni hal qildi:

textBox.Resize += (sender, args) =>
{
    Control c = sender as Control;
    if (c == null || c.Parent == null)
        return;

    c.Focus();
    c.Parent.Focus();
};
0
qo'shib qo'ydi