Diskuze: c# form - zakázání označování textu v komponentě textBox
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 60.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tak už jsem se k tomu konečně dostal a už mi to funguje Díky moc. Ještě jsem se chtěl zeptat jestli by bylo možné aby ten sroll byl viditelný a enabled=false když je krátký text (vejde se do labelu) a kdyby byl text dlouhý (nevejde se do labelu) pak by byl scroll viditelný a enabled=true.
při tomhle řešení ne. Muselo by se to řešit jinak (bude to složitější), třeba podobně jako to řešil D0ll0k, ale jeho příklad nefunguje dobře. Možná to i zkusím.
takže tady jsem předchozí projekt trochu upravil:
Přidal jsem do toho panelu VScrollBar a Dock
jsem mu nastavil na Right
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// do panelu panel1 jsem vložil na pozici 0 0 label label1 a
// VScrollBar vScoll s nastavením Dock-Right
label1.AutoSize = true;
panel1.Resize += UpdateSize;
//label1.TextChanged += UpdateSize;
label1.Resize += UpdateSize; //<= toto jsem doplnil
Load += UpdateSize;
vScoll.Scroll += vScrollAction; //<= toto jsem doplnil
}
//a upravil jsem tuto metodu:
private void UpdateSize(object sender, EventArgs e)
{
Size maxsize = label1.MaximumSize;
maxsize.Width = panel1.Width - 3 - vScoll.Width;
label1.MaximumSize = maxsize;
label1.Top = 0;
vScoll.Enabled = (label1.Height > panel1.Height);
vScoll.LargeChange = panel1.Height;
vScoll.Maximum = label1.Height + 16;
//těch 16 jsem tam dal, aby měl uživatel jistotu, že je dole
vScoll.Value = vScoll.Minimum;
}
//vložení textu:
private void button1_Click(object sender, EventArgs e)
{
if (Clipboard.ContainsText()) label1.Text = Clipboard.GetText();
}
private void vScrollAction(object sender, ScrollEventArgs e)
{
label1.Top = -vScoll.Value;
}
}
doufám, že už budeš spokojený
Super tak to je přesně to co jsem potřeboval. Díky moc Ještě prosím mám jednu
otázku. Nešlo by rychleji rolovat v labelu? Teď je to o něco pomalejší
než v předchozím případě. To už je snad opravdu poslení dotaz. Jinak
skvělá práce...
Díky
Mě se to funguje, normálně. Tak nevím jestli to pomůže, ale můžeš zkusit dát do konstruktoru okna DoubleBuffered = true; nebo i použít upravený Label
public class MyLabel : Label
{
public MyLabel()
{
DoubleBuffered = true;
}
}
Ono přece jen hýbání komponentami není ideální způsob jak pracovat s
WinForm.
Nejlepší by asi bylo kreslení textu, ale teď nemám moc čas se s tím
drbat.
Ahoj, tak jsem se k tomu opět po dlouhé době dostal. Tak DoubleBuffered = true; mi nepomohlo, pořád když chci rollovat v labelu je to hrozně pomalé oproti předchozímu případu viz. gif v příloze. V horním labelu jde rollovat rychle a ve spodním ne. Spodní label je poslední varianta a vše jinak funguje jak má. Nevíš co stím? Díky
tak na to zkus jít od lesa:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// do panelu panel1 jsem vložil na pozici 0 0 label label1 a
// VScrollBar vScroll s nastavením Dock-Right
label1.AutoSize = true;
panel1.AutoScroll = true; //!
panel1.Resize += UpdateSize;
label1.Resize += UpdateSize;
Load += UpdateSize;
vScroll.Maximum = vScroll.Minimum; //!
vScroll.Enabled = false; //!
}
private void UpdateSize(object sender, EventArgs e)
{
Size maxsize = label1.MaximumSize;
maxsize.Width = panel1.Width - 3 - vScroll.Width;
label1.MaximumSize = maxsize;
vScroll.Visible = (label1.Height < panel1.Height); //!
}
/*
//vložení textu:
private void button1_Click(object sender, EventArgs e)
{
if(Clipboard.ContainsText()) label1.Text = Clipboard.GetText();
}
*/
}
(důležité změny jsem označil vykřičníkem)
Zobrazeno 10 zpráv z 60.