почему функция Enable в функции имеет значение true? - PullRequest
0 голосов
/ 01 февраля 2011


я делаю функцию, которая использует элемент управления в качестве параметра, и я использую свойство элемента управления 'enable'.

проблема в том, что элемент управления имеет значение Enable = false, а внутри функции это правда,

есть идеи, почему?

protected override void OnPaint(PaintEventArgs pevent)
{
    try
    {
    ...

    Shared.DrawTextByAlignment(pevent.Graphics, this, this.TextAlign);
    }
    catch (Exception ex) { MessageBox.Show("Button:OnPaint\n" + ex.Message); 
}

static public void DrawTextByAlignment(Graphics g, Control myControl, ContentAlignment TextAlign)
{
    ...

    Brush myBrush;
    if (myControl.Enabled) myBrush = new SolidBrush(myControl.ForeColor);
    else myBrush = Brushes.Gray;            

    ...
}

Ответы [ 3 ]

1 голос
/ 01 февраля 2011

Я думаю, вам может понадобиться свойство Visible вместо включенного свойства.

Поскольку Enable = false, элемент управления не создает никаких изменений

1 голос
/ 01 февраля 2011

При передаче элемента управления вы почти всегда говорите о class / объект-экземпляр, поэтому все, что вы передаете, - это ссылка на элемент управления - сам элемент управления идентичен.

Одна возможная причина этого - неправильная проверка:

if(ctrl.Enabled = true) { // spot the assignment!
    DoSomething(ctrl);
}

, которая должна быть:

if(ctrl.Enabled == true) {
    DoSomething(ctrl);
}

или просто:

if(ctrl.Enabled) {
    DoSomething(ctrl);
}

но компилятор скажет вам, что в предупреждении ...

Назначение в условном выражении всегда постоянное;Вы хотели использовать == вместо =?

Это оставляет только несколько вариантов:

  • Enabled действительно изменилось, возможно, из-за состояниятакие изменения, как перемещение его в дереве элементов управления
  • свойство Enabled не поддается никаким изменениям и изменениям при проверке
  • свойство Enabled зависит от потока, и вы обращаетесь к нему из несколькихthreads
  • или, в вашем коде происходит что-то еще, о чем ваш вопрос нам не говорит, но источник может

Я предпочитаю, чтобы это был последний вариант...

0 голосов
/ 01 февраля 2011

Если вы извлекаете класс из Control и переопределяете свойство Enabled с помощью ключевого слова new, ваша функция все равно будет обращаться к Control.Enabled. Измените подпись на

static public void DrawTextByAlignment(..., MyControl myControl, ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...