MaximusDebois Ответов: 2

Откройте форму с панели


Я работал над проектом в течение последнего месяца, но я действительно застрял. У меня есть форма под названием MainForm, которая имеет 2 панели. Один называется MainContainer, а другой-SubContainer. У меня есть еще две формы, одна называется Login, а другая SQLSettings. Субконтейнер находится внутри MainContainer. Предполагается, что субконтейнер будет содержать все открытые формы. Когда MainForm загружается при запуске, он открывает форму входа в Субконтейнер. Login содержит linklabel, который также должен открывать форму SQLSettings в Субконтейнере, но ничего не происходит, когда я нажимаю на linklabel в форме входа.

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

это код для linklabel, который, как предполагается, открывает форму SQLSettings:
this.Close();
            MainForm f = new MainForm();
            Form cur = new SQLSettings();
            f.SubContainer.Dock = DockStyle.None;
            f.SubContainer.Anchor = AnchorStyles.None;
            f.SubContainer.Size = cur.Size;
            f.SubContainer.Location = new Point(f.MainContainer.Width / 2 - f.SubContainer.Width / 2,
                f.MainContainer.Height / 2 - f.SubContainer.Height / 2);
            cur.TopLevel = false;
            f.SubContainer.Controls.Remove(f.currentForm);
            f.SubContainer.Tag = cur;
            f.SubContainer.Controls.Add(cur);
            f.SubContainer.Tag = cur;
            cur.BringToFront();
            cur.Show();

Otekpo Emmanuel

Попробуйте следующие варианты;

1. Проверьте, отключена ли метка ссылки или форма.

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

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

4. Попробуйте добавить еще одну метку ссылки, а затем, возможно, напишите код для отображения окна сообщения и посмотрите, работает ли он

Дайте свой отзыв

Richard MacCutchan

Я не совсем уверен, что именно вы пытаетесь сделать здесь, но в приведенном выше коде у вас есть:

MainForm f = new MainForm();

а потом ты попробуешь
f.SubContainer.Controls.Remove(f.currentForm);

Но вы еще не установили значение currentForm в f переменная. Может быть, использование собственных имен для ваших ссылок прояснит ситуацию.

MaximusDebois

Я пытаюсь удалить форму входа из панели субконтейнера и открыть форму SQLSettings, когда нажимаю на linklabel в форме входа

Richard MacCutchan

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

2 Ответов

Рейтинг:
2

OriginalGriff

Это потому что ты так делаешь:
MainForm f = new MainForm();который создает - очевидно - новый экземпляр MainForm. Это не тот же экземпляр, на который смотрит пользователь, поэтому добавление к нему элементов управления и т. д. не влияет на то, что видит пользователь. Вам нужно будет получить доступ к экземпляру MainForm, содержащему текущий контейнер, а это непросто, потому что контейнер не должен знать, что его содержит.

Лучшая идея состоит в том, чтобы контейнеры генерировали события, на которые форма может подписаться и выполнять за них работу.
Это проще, чем кажется: Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^] покажет вам, как - это говорит о формах, но это точно то же самое для элементов управления (форма-это элемент управления, просто с большим количеством наворотов).


Рейтинг:
1

BillWoodruff

Цитата:
Предполагается, что субконтейнер будет содержать все открытые формы.
Было бы ошибкой помещать форму в любой другой ContainerControl, например в форму: вы можете использовать панель или другой ContainerControl для размещения элементов управления.

По соображениям безопасности и для достижения разделения интересов ... так что ваше приложение будет безопасным, а не беспорядочным: используйте отдельные формы для входа в систему и настройки SQL. Внимательно рассмотрите необходимую безопасность: должен ли пользователь даже видеть основной пользовательский интерфейс без входа в систему ?

Элемент управления LinkLabel обычно используется для открытия веб-страницы; хотя вы можете выполнить произвольный код в его событии clicked, почему бы просто не использовать кнопку и.или метку ?