Как сделать элементы управления базовой формы невидимыми в дочерней форме C # - PullRequest
1 голос
/ 16 ноября 2011

У меня есть форма главного окна и другая форма, которая наследуется от нее.

Вторая форма должна иметь доступ к элементам управления (Кнопки, PictureBox и т. Д.) Основной формы. Поскольку он наследуется от основной формы, внешний вид дочерней формы по умолчанию идентичен внешнему виду основной формы по умолчанию.

Как мне преодолеть это и получить доступ к элементам управления основной формы одновременно?

Я не хочу, чтобы меня снова заставляли менять дизайн!

Вопрос решен, Thnx за ответы ...

Ответы [ 6 ]

1 голос
/ 16 ноября 2011

Когда я наследую другую форму от основной формы, появление унаследованного становится точно таким же, как и основная форма.

Как мне преодолеть это и получить доступ к элементам управления главной формы одновременно.

Ну, просто не наследуй это. Как и почему вы унаследовали это? И к чему вы хотите получить доступ?

Если на Form2 у вас есть следующий код:

private Form1 _form1;

public Form2(Form1 form1)
{
    this._form1 = form1;
}

public void DoSomethingWithForm1()
{
    this._form1.SomeControl.DoSomething();
}

Затем в DoSomethingWithForm1 вы можете вызывать методы и элементы управления доступом в другой форме. Это, однако, не продуманный дизайн, вам лучше работать с объектами передачи данных или чем-то вроде FormRepository, который содержит все ваши формы и передает данные между ними, поэтому вашим формам не нужно будет знать друг о друге.

1 голос
/ 16 ноября 2011

Не уверен, что это лучший способ! Но не мог пройти "этот" через конструктор, это позволит вам затем получить доступ к открытым функциям, которые есть у вас внутри формы

0 голосов
/ 16 ноября 2011

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

Для ясности: хотя открытая дочерняя форма наследует от своего открывателя, они не того же экземпляра.Вам нужно будет передать основной экземпляр формы в качестве параметра конструктору дочерней формы.

PopupForm myPopupForm = new PopupForm(this);


// PopupForm.cs
public class PopupForm : MainForm {
    MainForm _opener;

    public PopupForm(MainForm opener) {
        _opener = opener;
    }
}
0 голосов
/ 16 ноября 2011

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

public partial class baseForm : Form
    {
        bool canShowControls;

        public baseForm(bool canShowBaseControls)
            : this()
        {
            InitializeComponent();
            canShowControls = canShowBaseControls;
        }
        public baseForm()
        {
            InitializeComponent();
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            HideControls();
        }

        void HideControls()
        {
            this.button1.Visible = canShowBaseControls;
            this.txtBox.Text = canShowBaseControls;
        }
    }


public partial class childForm : baseForm
    {
        public childForm()
        {
            InitializeComponent();
        }
        public childForm(bool canShowBaseControl = true)
            : base(canShowBaseControl)
        {

        }
    }
0 голосов
/ 16 ноября 2011

Вы можете изменить тип доступа с «частного» на «защищенный».Это можно сделать как в коде, так и с помощью GUI Designed.В GUI Designer это свойство называется «Модификаторы»

0 голосов
/ 16 ноября 2011

Создайте все элементы управления на mainform как открытые поля и получите к нему доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...