ComboBox - tartalomhoz igazodó szélesség

ComboBox - tartalomhoz igazodó szélesség
2010-08-04T23:10:09+02:00
2010-08-07T13:51:28+02:00
2022-11-18T18:10:38+01:00
HE_Norberto
Sziasztok!

Elhatároztam, hogy kicsit szórakozom a ComboBox-okkal azon felül, hogy feltöltöm adatokkal.

Most azt szeretném megvalósítani, hogy tartalomtól függjön a lenyíló menü szélessége, ezt így próbáltam megoldani:


// A katalógus legördülő lista szélességét határozza meg, mert ez a benne foglaltaktól függően változhat private void katlistszel() { int belsoszam = 0; int belsohossz = comboBox1.Items[belsoszam].ToString().Length; for (int szamlal = 1; szamlal < comboBox1.Items.Count; szamlal++) { if (comboBox1.Items[belsoszam + 1].ToString().Length > comboBox1.Items[belsoszam].ToString().Length) { belsohossz = comboBox1.Items[belsoszam + 1].ToString().Length; } belsoszam++; } comboBox1.DropDownWidth = belsohossz+10; }

A +10-es szám ráhagyás, szóval, hogy ne pont a szöveg után egyből legyen a széle a legördülő "doboznak".

A gondom ezzel az, hogy a keretrendszer, ha jól érzem, nem veszi figyelembe a betűk szélességét. Így egész más eredmény jön ki, ha alapvetően sokkal több a vékony betű a lista adott eleménél, mintha a szélesebből lenne benne több, pl. az m betűk esetét tekintve.

A Visual C# nyelv tanulását kb. 4 héttel ezelőtt kezdtem, szóval, ha valamit nem megfelelően fogalmaztam, vagy írtam a forráskódban, akkor elnézést érte, inkább javítsatok ki, ha kérhetem, s ha valami erősen hibádzik. Van még mit tanulnom, de szívesen teszem. (Sajnos programozás-elméletből sem voltam jó eddig, mert nem vezettek rá sosem.)
Mutasd a teljes hozzászólást!
Feltételezem, ez vagy a használt betűméret, ill. típus miatt lehet, vagy éppen a nagybetűk alkalmazása miatt, melyek az adott betűtípusnál - azt hiszem, MS Sans Serif - 12, bold - jóval eltérnek a kisbetűk szélességétől.)

Ha teheted, használj olyan font-ot ahol azonos a karakter szélesség (pl. Courier).
Ötletadó lehet..(Monospace/Fixed Width Programmer's Fonts )
Mutasd a teljes hozzászólást!

  • Graphics g = comboBox1.CreateGraphics();
    int szelesseg = (int)g.MeasureString(comboBox1.Items[...], comboBox1.Font).Width;
    g.dispose();
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen a válaszod.

    Sajnos nem egészen úgy működik, ahogy én azt szeretném.

    Viszont az ötleteddel már sikerült kicsit boldogulnom a Google-ban, és végülis találtam még párféle megvalósítást, de az az igazság, hogy egyik sem 100 %-os, illetve tökéletes. Kicsit később még írok egy bővebb beszámolót, hogy mik voltak a tapasztalataim az egyes, kipróbált eljárásokkal... (végülis összességében az volt a probléma mindegyiknél, hogy nem tudta a "grafikius objektum" helyesen megállapítani a szövegek tényleges hosszát, mindig kicsit rövidebb eredmény jött ki, mint a valós. Feltételezem, ez vagy a használt betűméret, ill. típus miatt lehet, vagy éppen a nagybetűk alkalmazása miatt, melyek az adott betűtípusnál - azt hiszem, MS Sans Serif - 12, bold - jóval eltérnek a kisbetűk szélességétől.)
    Mutasd a teljes hozzászólást!
  • Feltételezem, ez vagy a használt betűméret, ill. típus miatt lehet, vagy éppen a nagybetűk alkalmazása miatt, melyek az adott betűtípusnál - azt hiszem, MS Sans Serif - 12, bold - jóval eltérnek a kisbetűk szélességétől.)

    Ha teheted, használj olyan font-ot ahol azonos a karakter szélesség (pl. Courier).
    Ötletadó lehet..(Monospace/Fixed Width Programmer's Fonts )
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd