Diskuze: Tlačítka menustrip - enable/disable
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
//= 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.
Nj, protože se ho ptáš na něco co nechceš, musíš místo
txtEdit.SelectedText.Length napsat jen txtEdit.Text.Length. Ty se ho takhle
ptáš jestli je něco Selectováno (označeno), předtím než se něco do něj
zapíše.
No, to mi ale taky nic nedělá. Vůbec nic se neděje...
Chápeme se dobře, že znepřístupňování ikonek chci, aby probíhalo v
debug módu?
Už je mě to jasné asi, zkusil jsem to narychlo naprogramovat. Popsal jsem
to tak, žeby to mělo jít snad uchopit.
private string textSchranky ="";
private void Kopirovat_toolStripButton_Click(object sender, EventArgs e)
{
textSchranky = Text_textBox.SelectedText;
}
private void Vyjmout_toolStripButton_Click(object sender, EventArgs e)
{
textSchranky = Text_textBox.SelectedText;
Text_textBox.SelectedText = "";
}
private void Vlozit_toolStripButton_Click(object sender, EventArgs e)
{
Text_textBox.Text = Text_textBox.Text.Insert(Text_textBox.SelectionStart, textSchranky);
}
private void Text_textBox_MouseMove(object sender, MouseEventArgs e)
{
if (textSchranky != "")
Vlozit_toolStripButton.Enabled = true;
else
Vlozit_toolStripButton.Enabled = false;
if (Text_textBox.SelectedText.Length > 0)
{
Kopirovat_toolStripButton.Enabled = true;
Vyjmout_toolStripButton.Enabled = true;
}
else
{
Kopirovat_toolStripButton.Enabled = false;
Vyjmout_toolStripButton.Enabled = false;
}
}
Teda je to přes událost MouseMove,takže se to zachytává když někdo jede přes textBox - tedy něco označí třeba..
Děkuji moc za radu. Přepsal jsem do mého projektu, ale pořád to nejede. Učím se teprve rok programovat, asi budu muset s touto vychytávkou ještě chvíli počkat.
Líbí se mi, jak to má udělané Word, kde se tlačítka zpřístupní, až
když je akce dostupná.
Myslel jsem, že to bude jednodušší, ale kód výše je pro mne ještě moc
složitý.
Kdyby se někomu podařilo přijít s jednodušší variantou, sem s ní
Moc díky.
Mě tohle třeba jede a je to napsáno dost jednoduše. Napíšu ti k tomu komentář - co
která věc dělá. Snad to pomůže.
// tohle je proměnná, s kterou bude moc pracovat jakákoliv metoda ve stejné třídě - tedy všechny metody zde níže napsané, je nastavená na "" - tedy nic
private string textSchranky ="";
// tohle se aktivuje při zmáčknutí tlačítka Kopírovat, které je umístěno v toolStripu jako button
private void Kopirovat_toolStripButton_Click(object sender, EventArgs e)
{
// vyselectovaný (vybraný) text se uloží do proměnné textSchranky
textSchranky = Text_textBox.SelectedText;
}
// tohle se aktivuje při zmáčknutí tlačítka Vyjmout, které je umístěno v toolStripu jako button
private void Vyjmout_toolStripButton_Click(object sender, EventArgs e)
{
// vyselectovaný (vybraný) text se uloží do proměnné textSchranky
textSchranky = Text_textBox.SelectedText;
// tento vybraný text se následně změní na nic - v podstatě se smaže
Text_textBox.SelectedText = "";
}
// tohle se aktivuje při zmáčknutí tlačítka Vložit, které je umístěno v toolStripu jako button
private void Vlozit_toolStripButton_Click(object sender, EventArgs e)
{
// Text_textBox.Text - tedy současný text v textBoxu se přepíše na: ten samý textm který bude mít na indexové pozici, kde začíná vyselectovaná část se připíše náš text, který máme uložený v textSchranky
// Text_textBox.SelectionStart - tohle vrací index současné označené pozice
Text_textBox.Text = Text_textBox.Text.Insert(Text_textBox.SelectionStart, textSchranky);
}
// pokud se někdo bude pohybovat v tomto textBoxu, tak se tahle metoda aktivuje
private void Text_textBox_MouseMove(object sender, MouseEventArgs e)
{
// pokud v proměnné textSchranky bude uložené cokoliv, tak se tlačítko Vložit zviditelní
if (textSchranky != "")
Vlozit_toolStripButton.Enabled = true;
// v každém jiném případě - tedy pokud není žádný textuložen, tak bude tlačítko Vložit znepřístupněno
else
Vlozit_toolStripButton.Enabled = false;
// pokud je vyselectováno (označeno aspon jedno písmeno), tak se tlačítko Kopírovat a Vyjmout zviditelní
if (Text_textBox.SelectedText.Length > 0)
{
Kopirovat_toolStripButton.Enabled = true;
Vyjmout_toolStripButton.Enabled = true;
}
// v každém jiném případě - tedy pokud není nic vyselectováno - označeno, tak se tlačítka Kopírovat a Vyjmout znepřístupní
else
{
Kopirovat_toolStripButton.Enabled = false;
Vyjmout_toolStripButton.Enabled = false;
}
}
Moc děkuji za vyčerpávající komentáře. V původním projektu to nefungovalo, proto jsem udělal toto:
Založil jsem nový projekt Form aplikace, přidal třídu ToolStrip, přidal
3 tlačítka, nazval je (pro výše uvedený kód) Kopirovat_toolStripButton,
Vyjmout_toolStripButton a Vlozit_toolStripButton. Dále jsem přidal textBox
a nazval ho Text_textBox. Vložil jsem tvůj kód a prostě mi to nejde.
Zkoušel jsem ve výchozím stavu tlačítka Enabled -> false, ale podle
kódu by to mělo být jedno.
Opravdu nevím.
Už vím kde máš problém. Ty si všechny ty metody píšeš do zdrojáku jen a nevytváříš je
přímo na dané kontrolce.
Například metoda:
private void Kopirovat_toolStripButton_Click
- to nemůžeš jen tak napsat do kódu, ale musíš taky tlačítku říct
že něco takového tam existuje. Musíš si kliknout na danou kontrolku v
návrhu a v pravo dole máš takový panel, jmenuje se to Properties, kde je
nastavení kontrolky, je tam taky takovej "oranžovej blesk" (Events) - to
znázorňuje události na dané kontrolce, na které bude schopná reagovat.
Pokud chceš aby se něco
stalo po kliknutí, tak si tam musíš najít událost co se jmenuje Click - v
současnosti tam nic není, protože se nic neděje při kliknutí na
tlačítko, když si na to místo u Click klikneš dvakrát, tak se ti vytvoří
ona metoda ve zdrojovém kódu propojená s kontrolkou. Tahle metoda se ti
aktivuje při kliknutí na kontrolku. (U tlačítek ti stačí i pouhý dvojklik
na kontrolku v tom tvém návrhu). Takhle to v podstatě uděláš u všech
tlačítek co chceš aby něco dělaly.
Pak si klikneš na ten textBox a najdeš v properties událost
MouseMove. Když to takhle budeš mít, tak si stačí do jednotlivých metod
dopsat kousky kódu co se mají provést. A máš to.
aha, tak už vím, proč mi nefungovali všechny návody, co jsem nacházel
na internetu Jo, to jsou ty
začátky.. Trochu trapas...
Každopádně mi to už funguje. Pouze tam mám chybu, a to tu, že v tom mým programu mám tlačítka napojeny na menuStrip a to takhle:
private void mnuUpravyKopirovat_Click(object sender, EventArgs e)
{
txtEdit.Copy();
private void tbtnKopirovat_Click(object sender, EventArgs e)
{
mnuUpravyKopirovat_Click(sender, e);
textSchranky = txtEdit.SelectedText;
takže se děje to, že mi to při zkopírování vkládá 2x.
Právě jsem odstranil to předávání z hlavní nabídky a už to funguje jak
má.
Díky moc za trpělivost se mnou... Fakt díky za radu a mnoho úspěchů!
Zobrazeno 9 zpráv z 9.