Member 12590531 Ответов: 1

Как включить / отключить элемент menustrip out side mdiparent form


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

Что я уже пробовал:

MDIParen. cs:-

частная adminToolStripMenuItem_Click недействительным(объект отправителя, EventArgs в е)//админ управления menustrip под что их логин и домашнее полоски.
{
if (loginToolStripMenuItem.Включено = = true)
{
homeToolStripMenuItem.Enabled = false;

}
ещё
{
homeToolStripMenuItem.Включен = истина;

}
}

}
}

Логин.в CS:-

общественный разделяемого класса loginpg : форма
{
общественные loginpg()
{
метод InitializeComponent();
}


частная loginbutton_Click недействительным(объект отправителя, EventArgs в электронной)
{
если (usertxt.Текст=="Арджун" и усилитель; & passwordtxt.Текст=="12345")
{
homepg H = новый homepg();
Х. Показать();
этот.Скрыть();
MDIParent1 M =новый MDIParent1();
M. Controls ["loginToolStripMenuItem"].Enabled = false; / / Nullexception здесь



}
}

Sergey Alexandrovich Kryukov

Ваша проблема не в пользовательском интерфейсе, а в понимании самых элементарных основ программирования. Сначала тебе нужно его починить.
Например, что значит " если (loginToolStripMenuItem.Enabled = = true)"? Тип .Enabled уже является логическим, зачем сравнивать его с "true". Это то же самое, что и "if (loginToolStripMenuItem.Включено)...". и так далее...
Во всяком случае, задание на .Включить имущество является решение.
—СА

Member 12590531

Ты вообще знаешь C#?Не думай, что ты знаешь.

Sergey Alexandrovich Kryukov

Ты меня поймал.
—СА

1 Ответов

Рейтинг:
5

BillWoodruff

Когда вы объявляете MDIParent1 M =new MDIParent1 (); внутри метода внутри вашей формы входа: этот экземпляр ' MDIParent1 не существует вне области действия формы входа.

Я думаю, что это лучшая стратегия, чтобы убедиться, что конечный пользователь никогда не "доберется" до основной формы, MDIParentForm, если только вход в систему не является действительным; в этом случае проблема отключения menustrip не возникает. Вот как это сделать:

Предполагая,:

1. форма с именем 'FormMDIParent, которая является "основной формой", которая будет показана после успешного входа в систему.

2. а войти в форму с двумя текстовыми полями, 'tbxPassword, и tbxUserName. И две кнопки: "btnSubmit" и "btnCancel". Журнал-в собственность формы AcceptButton устанавливается значение 'tbxSubmit, и войти в свойство формы 'кнопку Отменить, установлен tbxCancel.

Измените файл Program.cs следующим образом:

using System;
using System.Windows.Forms;

namespace YourMDIProject
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            if ((new FormLogIn()).ShowDialog() == DialogResult.OK)
            {
                Application.Run(new MDIParentForm());
            }
        }
    }
}
Таким образом, приложение показывает форму входа модально; когда форма входа закрыта, если DialogResult является 'OK, то приложение запускает новый экземпляр 'MDIParentForm, который становится "основной формой"."

Теперь посмотрите на логику в " Логинформе:
using System;
using System.Windows.Forms;

namespace YourMDIProject
{
    public partial class FormLogIn : Form
    {
        public FormLogIn()
        {
            InitializeComponent();
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
        }

        private void btnSubmit_Click(object sender, EventArgs e)
        {
            if (LogInValidator(tbxPassword.Text, tbxUserName.Text))
            {
                this.DialogResult = DialogResult.OK;
            }
            else
            {
                // what now ? cancel ?
                // allow the user to repeat again for #n times ?

                // do "nothing" here and the Application will terminate
            }
        }

        private bool LogInValidator(string password, string username)
        {
            // your validation function that returns a 'bool
            // goes here
            // ????
    }
}
Есть еще один способ сделать это, который я предпочитаю использовать, когда вы запускаете приложение с экземпляром ApplicationContext, но я думаю, что этот пример проще и более уместен в данном контексте.

Вы также можете создать EventHandler для события ' FormClosing формы входа в систему и в этом коде получить более подробную информацию о том, почему именно форма входа закрывается, обратившись к перечислению 'CloseReason в аргументах события для этого обработчика событий.


Member 12590531

Эй, теперь я понял.Мне было трудно понять это, так как я начал работать с C# с одной недели.
Спасибо За Ваше Решение.Это Очень Помогло.Огромное спасибо!.

BillWoodruff

Пожалуйста. Иногда лучший способ обойти проблему - это "обойти ее". по моему опыту (как учитель) многие люди, имеющие некоторый опыт работы с WinForms, никогда по-настоящему не смотрели на код в файле Program.cs и не рассматривали, как он "работает"."

Member 12590531

Эй, Биллвудруфф, ваше решение лучше всего, но я получил задание отключить manustrip со страницы входа, где сначала откроется форма mdiparent, а затем я выберу логин, и после этого логин будет отключен, а home, который является другим manustip, включен. он дал намек на то, что будет использоваться какая-то функция "contains".

BillWoodruff

Подумайте, какое впечатление произведет на вас ваш учитель, когда вы расскажете ему / ей очень веские причины не показывать сначала форму MDIParentForm ! твое здоровье, Билл

BillWoodruff

То, что вы описываете здесь, не должно быть так сложно реализовать: сделайте 'MDIParentForm вашей основной формой (не изменяйте файл Program. cs), в событии загрузки 'MDIParentForm покажите' LogInForm с помощью ShowDialog(это);

Установите свойство MainMenuStrip формы Mdiparent в свой MenuStrip, установите видимые и включенные свойства MenuStrip в значение false.

Когда LoginForm, который будет закрыт, интерпретировать значение dialogresult вернулся и поступить правильно установить управления menustrip включен, то видно, свойства значение true. Или, показывают другое меню, в зависимости от значение dialogresult.