C# - Как выбрать, какой пользователь Control загружается первым? - PullRequest
0 голосов
/ 14 января 2020

Я использую WinForm для своей маленькой CRM.

Я получил форму MainWindow и на этой форме 3 панели (1 Top / 1Left / другая часть заполнена 7 Control User)

Все пользователи Control находятся друг над другом, и когда я нажимаю на какую-то кнопку (прикрепленную к левой панели), вызываемый CU выводится на передний план.

 public void BtnContact_Click(object sender, EventArgs e)
    {
        contactControl1.Visible = true;
        contactControl1.BringToFront();
        panelBar.Height = BtnContact.Height;
        panelBar.Top = BtnContact.Top;
        employe1.Visible = false;
        comptaControl1.Visible = false;
        histoControl1.Visible = false;
        alerteControl1.Visible = false;
        voyageursControl1.Visible = false;
        parametresControl1.Visible = false;
    }

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

Если у меня нет выбора, чтобы открыть все (в чем я сомневаюсь), как я могу выбрать тот, который я хочу открыть первый или второй эт c ??

Спасибо

Ответы [ 5 ]

0 голосов
/ 15 января 2020

Вы можете перебрать все элементы управления в Panel, а затем определить тип элемента управления, чтобы изменить их свойство Visible. Ниже приведен пример UserControl1.

private void Form1_Load(object sender, EventArgs e)
{
    panel1.Controls.Add(new UserControl1 { Visible = false });
    panel1.Controls.Add(new UserControl2 { Visible = false });
    panel1.Controls.Add(new UserControl3 { Visible = false });
}

private void button1_Click(object sender, EventArgs e)
{
    foreach (Control control in panel1.Controls)
    {
        if (control is UserControl1)
        {
            control.Visible = true;
            control.BringToFront();
        }
        else
        {
            control.Visible = false;
        }
    }
}
0 голосов
/ 14 января 2020

Вы можете поместить все элементы управления, которые должны быть показаны или скрыты на панели. Это называется the other part is filled up by 7 Control User в вопросе, поэтому просто используйте Panel для хранения всех этих элементов управления.

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

int currentIndex = -1;

public void BtnContact_Click(object sender, EventArgs e)
{
  currentIndex++;
  if (currentIndex >= panelFor7Control.Controls.Count)
    currentIndex = 0;
  foreach (Control c in panelFor7Control.Controls)
    c.Visible = false;
  Control control2show = panelFor7Control.Controls[currentIndex] ;
  control2show.Visible = true;
}

Для активации следующего элемента управления на панели необходимо нажать кнопку BtnContact.

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

0 голосов
/ 14 января 2020

Вам кажется, что вы хотите иметь "страницы" навигации, я не использую для работы с WinForm, но, возможно, этот пост может помочь вам

Какой самый эффективный способ создать форму Win с несколькими страницами?

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

Обратите внимание, что передача элементов управления из Visible в Hidden не выгружается их

0 голосов
/ 14 января 2020

Я не хочу, чтобы все CU загружались при запуске приложения

Используйте вкладку свойств и сделайте visible = false или используйте событие formload, чтобы предотвратить загрузку всех cu в Начните.

private void Form1_Load(object sender, System.EventArgs e)
{
   //use code to make anything visible or invisible  
}
0 голосов
/ 14 января 2020

Сначала вам нужно сделать экземпляр вашего U C, примерно так:

public partial class YourUC : UserControl
{        
    public static YourUC _instance;
    public static YourUC Instance
    {
        get
        {
            if (_instance == null)
                _instance = new YourUC();
            return _instance;
        }
    }
}

Затем вам нужно позвонить и показать U C при нажатии кнопки

    private void btn_Click(object sender, EventArgs e)
    {

        if (!pnlControls.Controls.Contains(YourUC.Instance))
        {
            pnlControls.Controls.Add(YourUC.Instance);
            YourUC.Instance.Dock = DockStyle.Fill;
            YourUC.Instance.BringToFront();                
        }
        else
        {
            YourUC.Instance.BringToFront();                
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...