bool Tclick = false;
if (Tclick == false)
{
txt1.Click += new EventHandler((o, e) => { txt1.Text = ""; Tclick = true; });
}
}
Я пытался сделать это, потому что думал, что если я установлю переменную «tclick» в значение true, обработчик событий больше не будет работать, потому что «Tclick» должен быть ложным для запуска обработчика событий, но обработчик событий все равно работает.
Вам нужен логический флаг? Почему бы вместо этого не удалить обработчик событий?
Вы показали 2 возможных способа сделать то, что хотите, но оба используются неправильно (или совершенно неполно):
bool
. В этом случае вам следует поместить условие внутрь обработчика и просто вернуться из него, если флаг равен true
, например:// Declare "flag" (preferrably in class, not method, scope
private bool Tclick;
// Setup anonymous handler
txt1.Click += (sender, args) =>
{
// Check here for was it previously called or not and return if was
if (Tclick)
return;
txt1.Text = "";
Tclick = true;
});
// Somewhere (or through Designer) you append the delegate once:
txt1.Click += OnTxtClick;
// Declare handler
private void OnTxtClick(object sender, EventArgs args)
{
// Do neccessary stuff...
txt1.Text = "";
// Remove the handler
txt1.Click -= OnTxtClick;
}
Во-вторых, если в каком-то случае вам нужно снова сделать кликабельным txt1
- вам просто нужно снова добавить делегата: txt1.Click += OnTxtClick;
УПД: Объяснение, почему первоначальный подход не работает.
Ваш логический флаг не указывает, должен ли обработчик выполняться или нет. Он решает, добавлять обработчик или нет. Как только вы добавите его (когда флаг равен false
) - он останется, вы не удалите обработчик, и поскольку флаг не проверяет, выполняться или нет, обработчик все равно выполняется при каждом следующем клике. Итак, мои предложенные подходы описывают два способа, которые вы пропустили: либо проверить и предотвратить выполнение с помощью логического флага, либо просто полностью удалить обработчик после выполнения.
Хороший ответ! Я думаю, вы могли бы добавить краткий комментарий о том, почему код ОП не делает то, что они ожидают.
@ lax48 обновил ответ, ты
Тысм, братан, я попробовал первый, и он сработал, я попробую другой для практики, ха-ха, и твое объяснение очень ценно, ха-ха-ха, теперь я наконец понял
Подумайте, когда оценивается утверждение
if (Tclick == false)
(подсказка: это случается гораздо реже, чем вы думаете...). Используйте пошаговый отладчик для пошагового выполнения программы.