textBox automatická šířka   otázka

VB.NET, WinForms

Dobrý den,

zajímalo by mě jak nastavit šířku textBox tak, aby text v něm byl vždy čitelný a nic nechybělo.

něco jako:

myTB.text="12345678910"
myTB.font=new Font(myTB.font.name,16,FontStyle.Bold,GraphicsUnit.Pixel)

'následující řádek je samozřejmě blbost, ale je to to, čeho se snažím dosáhnout.
myTB.width=myTB.text.width

Děkuji mnohokrát za odpověď.

Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste použít metodu System.Drawing.Graphics.MeasureString(String, System.Drawing.Font) As System.Drawing.SizeF

Jako parametry zadáte konkrétní text a font, kterým se má vykreslit. Metoda vrátí objekt typu SizeF, jehož vlastnosti Width a Height určují šířku a výšku, kterou Váš konkrétní text zabere.

Druhá věc je, zda je vhodné s velikostí textboxu na formuláři cvičit podle konkrétního obsahu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

omlouvám se, ale vůbec nevím jak tuto metodu použít. Aby MeasureString mohlo fungovat, musím nejdříve vycházet z nějakého grafického objektu. Mohl by jste prosím uvést nějaký příklad s textBoxem?

Děkuji,

Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ten grafický objekt si musíte našvindlit sám třeba takto:

    Dim F As System.Drawing.Font = TextBox1.Font
    Dim b As New System.Drawing.Bitmap(1, 1)
    Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(b)
    Dim S As System.Drawing.SizeF = g.MeasureString(TextBox1.Text, F)
    TextBox1.Height = CInt(S.Height)
    TextBox1.Width = CInt(S.Width)

Pro jistotu přičtěte vždy nějakou rezervu (5%)

Je třeba vyzkoušet, jak se to bude chovat.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Funguje to skvěle.

Děkuju moc.

Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě co se té vhodnosti týká.

Potřebuji zobrazit formulář, který bude obsahovat neurčitý počet dat. Bohužel tato data nemají žádný společný formát a tak jeden řádek obsahuje třeba tři informace další jen jednu, na dalším je nějaký popis co bude následovat, atp. Tato data musejí jít vybrat a být kopírována. Jsem začátečník a tak mě nic jiného nenapadá, než použít textBox. Možná ještě dataGridView ale to se mi zdá jako celkem složitá komponenta na pouhé zobrazení.

Pokud budete mít tip na nějakou jinou komponentu, popřípadě metodu, jak tyto data zobrazit, určitě bych jí uvítal.

Děkuji,

Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jakou používáte datovou strukturu pro uchovávání těch dat co se mají zobrazit? Nějak se mi nezdá tvrzení "tato data nemají žádný společný formát a tak jeden řádek obsahuje třeba tři informace další jen jednu, na dalším je nějaký popis co bude následovat".

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jistě. Máte pravdu. Nějak ta data uchovávat musím, a tak mám svou třídu, která má svou strukturu. Tato struktura je složená z kolekcí, které uchovávají vlastní struktury,2x trojici string, startTime, endTime, trojici integer, startTime, endTime. Dále několik vlastností. Toto dohromady tvoří jeden vstup.

Dále mám druhou, třídu která se stará o všechny vstupy. Statisky téhle třídy už mám vyřešeny právě pomocí dataGridView.

Nyní potřebuji zobrazit statistiku (no vlastně spíš historii) jednoho vstupu. Pro jednu trojici typu string, startTime, endTime potřebuji zobratit několik dalších trojic které se vejdou do časového intervalu první trojice. Pokud má vstup více takových "prvních trojic" pak opět musím přiřadit jiné trojice v daném intervalu.

Př:

číslo vstupu

Jméno1 od do

status1 od do

priorita1 od do

status2 od do

priorita1 od do

priorita1 od do

Jméno2 od do

status1 od do

priorita1 od do

atd.

-----------------------

Výpis ostatních nastavených vlastností

Předpokládám, že tato data budou opravdu jen v takovémhle množství, žádné velké závislosti. Výpis ostatních nastavených vlastností - tak tam bude asi tak deset hodnot jako vlastní komentáře, nebo nějaká čísla.

Na zobrazení těchto dat jsem se rozhodl použít Form2 a tyhle data poskládat z textBoxů. TextBoxy chci poskládat dynamicky tak aby byly pouze readOnly a vůbec aby vypadaly jako labely. To se mi samozřejmě za čas povede, ale je to spíš blbá otročina, než dobrej nápad. Ve VB dělám asi tak měsíc a tak neznám jiné komponenty, které by toto řešily efektivně, nebo třeba jen jednu komponentu, která by byla jednodušší na formátování textu. Taky samozřejmě potřebuji, aby byl formulář naformátován tak, aby data byla čitelná. Aby to nějak vypadalo.

Data načítám z xml dokumentu a také je tam ukládám. Tak možná by se hodila nějaká stromová struktura nebo tak něco.

Kdyby jste uměl poradit, byl bych Vám vděčný.

Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste:

Dim koef As Integer = 4 'pixelová šířka jednoho písmena
myTB.Width = myTB.Text.Length * koef

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

děkuji za typ, ale velikost a font mého písma se liší případ od případu. Nemohu použít koeficient.

Petr

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback