Свойство включенных кнопок не работает должным образом

Я создаю приложение Windows. У меня есть две кнопки. Я написал следующий фрагмент кода.

frmRb obj = new frmrb();
private void btnPd_Click(object sender, EventArgs e)
        {
           btnCancel.Enabled = true;
           obj.btnRtn.Enabled = true;
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
            obj.BringToFront();
            obj.Focus();
        }

Приведенное выше кодирование не вызывает никаких ошибок.

Все операторы работают правильно, но следующий оператор не работает должным образом:

obj.btnRtn.Enabled = истина;

не выполняется.

Формы frmrb вынесены на передний план и сфокусированы, но btnRtn не включен, то есть оператор obj.btnRtn.Enabled = true; не работает.

По умолчанию я установил для свойства btnRtn Enabled значение false. Обратите внимание, что для свойства Modifier кнопки btnRtn установлено значение PUBLIC.

Теперь, как мне изменить кодировку, чтобы я мог выполнить этот оператор.

obj.btnRtn.Enabled = истина;

Кто-нибудь может мне помочь?

Заранее спасибо!!


person sheetal    schedule 03.07.2009    source источник
comment
Проверить включенный статус родительских элементов кнопки   -  person rahul    schedule 03.07.2009
comment
Нажмите другую точку останова сразу после присваивания obj.btnRtn.Enabled = true; а затем проверьте состояние. Если он возвращает false, то ни один из родителей не включен.   -  person rahul    schedule 03.07.2009


Ответы (11)


РЕШЕНИЕ Никогда не отключайте кнопку или не изменяйте ее видимость до того, как она будет инициализирована, иначе вы не сможете снова включить ее или снова сделать ее видимой. Вместо этого вы должны отключить его в своем собственном событии «Инициализировано», и тогда он будет работать правильно! У меня такая же проблема.

person Marcelo    schedule 09.05.2013

Вы не упомянули, где вы показываете obj (который является экземпляром frmRb). потому что это очень важный момент. из вашей кодировки кажется, что frmRb уже виден. так ты никогда не звонил

obj.Show() ;

вместо этого вы называете

obj.BringToFront();

поэтому проблема в том, что вы никогда не показываете объект frmRb. что вы создаете u в 1-й строке. каждый раз, когда ты пишешь строчку

frmRb obj = new frmrb();

создается новый экземпляр frMRB. Итак, вы должны снова показать это с помощью строки obj.Show() ; Теперь вы переписываете свой код как ::

frmRb obj = new frmrb();
private void btnPd_Click(object sender, EventArgs e)
        {
           btnCancel.Enabled = true;
           obj.btnRtn.Enabled = true;
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
            obj.Show();
            obj.BringToFront();
            obj.Focus();                
        }

Я надеюсь, что это полезно для вас и решить вашу проблему.

person Community    schedule 03.07.2009
comment
Привет Спасибо за ваш ответ. Но если я использую метод Show, данные, которые я ввел в TextBox перед нажатием кнопки в первой форме, не сохраняются. Метод show снова открывает форму, и мне снова нужно повторно ввести значения, введенные в текстовое поле. Есть ли способ временно скрыть эту форму и сохранить значения, когда форма2 закрыта. Пожалуйста, помогите мне! - person sheetal; 03.07.2009
comment
Существует очень хороший ответ, чтобы предотвратить открытие формы снова и снова in-c Чтобы скрыть форму, вы можете использовать метод form_name.hide(), а для повторного отображения снова используйте formname.show(), например; в вашем контексте вы используете obj.hide(), а затем obj.show(). - person ; 03.07.2009

Я использовал VB, а не C#, но языки очень похожи. в VB вам нужно добавить «обрабатывает SomeButton.Click», чтобы он обрабатывал события Click.

Согласно Google, эквивалент в C# — это зайти в файл Designer.cs, найти, где находятся элементы управления, и вручную изменить подключение события click, чтобы оно указывало на ваш новый обработчик событий.

Как упоминалось в предыдущем постере, используйте точку останова (F9) и отладчик, чтобы увидеть, вызывается ли когда-либо этот метод при выполнении события. Если он не вызывается, то проблема, вероятно, не в включенном свойстве, а в проводке метода, чтобы он вызывался при возникновении события.

Вот ссылка:

http://www.tek-tips.com/viewthread.cfm?qid=1442702&page=5

person Larry Watanabe    schedule 03.07.2009
comment
Спасибо за быстрый ответ. Я только что добавил точку останова и обнаружил, что операторы выполняются, но кнопка не активна. Что я должен сделать, чтобы выполнить желаемую задачу? Пожалуйста, помогите мне! - person sheetal; 03.07.2009

Кнопка размещена внутри панели или любого контейнера. Если да, то проверьте также включенный статус контейнера.

person rahul    schedule 03.07.2009
comment
Ни одна кнопка не размещена внутри какого-либо элемента управления панели или контейнера. - person sheetal; 03.07.2009

Я сильно подозреваю, что либо не вызывается обработчик кликов, или вы смотрите не на ту форму, о которой думаете.

Где вы настраиваете обработчик кликов для btnPd_Click? Убедитесь, что все еще подключено правильно.

Затем поставьте точку останова на первую строку обработчика и запустите его в отладчике - если вы не нажмете точку останова при нажатии кнопки, это проблема.

РЕДАКТИРОВАТЬ: Хорошо, следующие шаги:

  • Убедитесь, что вы смотрите на правильную кнопку. Измените его текст, а также включите его.
  • Убедитесь, что его контейнер включен, как это было предложено phoenix. Не только его прямой родитель, но и весь путь вверх.
  • Проверьте, что еще делает ваш UI-поток после этого — блокируете ли вы его по какой-то причине? Остальная часть пользовательского интерфейса работает в этот момент?
person Jon Skeet    schedule 03.07.2009
comment
Спасибо за быстрый ответ. Я только что добавил точку останова и обнаружил, что эти операторы выполняются, но кнопка все еще не активна. Что я должен делать? Как я могу достичь желаемой задачи? Пожалуйста, помогите мне кто-нибудь!! - person sheetal; 03.07.2009

Я бы попробовал просто переключить последовательность операторов на: private void btnPd_Click(object sender, EventArgs e) { obj.btnRtn.Enabled = true; btnCancel.Enabled = истина; }

и посмотрите, поможет ли это вам отладить

person Beth    schedule 13.07.2009

Ваш код действительно должен выдавать ошибку... C# чувствителен к регистру, что означает, что frmRb не совпадает с frmrb. Во всяком случае, я скопировал его, создал 2 формы и 3 кнопки, настроил обработчик, и все заработало.

private void InitializeComponent()
{
    this.btnPd = new System.Windows.Forms.Button();
    this.btnPd.Location = new System.Drawing.Point(90, 116);
    this.btnPd.Name = "btnPd";
    this.btnPd.Size = new System.Drawing.Size(75, 23);
    this.btnPd.TabIndex = 1;
    this.btnPd.Text = "button1";
    this.btnPd.UseVisualStyleBackColor = true;
    this.btnPd.Click += new System.EventHandler(this.btnPd_Click);
}
public System.Windows.Forms.Button btnRtn;

Вы уверены, что имели дело с btnPd? Возможно, вы заблокировали код включения внутри отключенной кнопки? Надеюсь, этот небольшой рабочий пример поможет вам найти проблему. Что касается остального кода, все, что я изменил, это frmRb на frmrb, чтобы они совпадали.

person Sivvy    schedule 26.08.2009

Если форма, которую вы пытаетесь отобразить на экране, отображается правильно, возможно, вы можете попробовать следующее:

  1. Создайте публичный метод в форме, который будет устанавливать свойство кнопки enable = true;
  2. После создания формы и отображения вы можете вызвать этот общедоступный метод;

frmRb obj = новый frmrb(); obj.EnableButton

person ZokiManas    schedule 03.09.2009

Просто догадка. Может быть, свойство кнопки «Заблокировано» равно «истине»

person Varun Mahajan    schedule 03.07.2009
comment
Заблокированное свойство не имеет ничего общего с включенным статусом кнопки. Он просто указывает, можно ли перемещать кнопку или изменять ее размер. - person rahul; 03.07.2009
comment
Нет, кнопка не заблокирована. Я имею в виду, что для свойства блокировки кнопки установлено значение false. - person sheetal; 03.07.2009

Пожалуйста, проверьте ситуацию с btnRtn, если btnRtn находится на панели или открыт, если он находится на панели, пожалуйста, проверьте свойство включенной панели, и ваше кодирование в порядке.

person user1869028    schedule 28.01.2013

Прошло некоторое время с тех пор, как кто-либо прокомментировал или ответил, я подумал, что представлю этот ответ/комментарий, поскольку он может быть полезен другим, кто наткнется на него.

Недавно у меня были некоторые CheckBox и NumericUpDowns, которые не меняли включенное состояние, но это было просто из-за того, что они находились в GroupBox, который не был включен. . Момент удара по лбу для меня, но мне потребовалось 20 минут, чтобы понять, почему эти элементы управления не реагировали!

person Sisyphus    schedule 16.01.2017