C# передать Label в UserControl

194
03 августа 2018, 19:10

помогите пжл кто чем сможет :) Есть форма авторизации

private void btnLogin_Click(object sender, EventArgs e)
    {
        if (comboLogin.Text == "Вася" && txtPass.Text == "1111")
        {
            this.Hide();
            f1.lblRole.Text = comboLogin.Text;
            f1.Show();
        }

После авторизации, пользователь попадает на главную форму. Также на главной форме присутствует UserControl (там в основном DatagridView живет). Так вот, на главной форме есть label "lblRole", в свойствах выставлен Modifiers:public, Text:User None. В lblRole отображается кто вошел, тоисть Вася. А вот UserControl считывает вошедшего не Вася, а то что выставлено в свойствах lblRole главной формы, тисть UserNone.

Код в UserControl

private void b1_Load(object sender, EventArgs e)// L O A D
        {
    frmMain fm = new frmMain();
                label1.Text = fm.lblRole.Text;
}

Вот собственно и сам вопрос, как получить кто вошел "Васю" а не свойства из lblRole в UserControl?

Answer 1

Форма получения имени и пароля называется FormLogin кнопка Отмена в свойствах этой формы определена как CancelButton, код этой формы такой

public partial class FormLogin : Form
{
    public FormLogin()
    {
        InitializeComponent();
    }
    public string Name { get; set; }
    public string Password { get; set; }
    private void buttonOk_Click(object sender, EventArgs e)
    {
        //считываем значения удаляя пробелы
        Name = _textBoxName.Text.Trim();
        Password = _textBoxPassword.Text.Trim();
        //проверяем
        if (String.IsNullOrEmpty(Name))
        {
            MessageBox.Show("Введите имя.", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
            return;
        }
        if (String.IsNullOrEmpty(Password))
        {
            MessageBox.Show("Введите пароль.", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
            return;
        }
        //отдаем результат
        this.DialogResult = DialogResult.OK;
    }
}

Главная форма программы имеет такой код

public partial class FormMain : Form
{
    public FormMain()
    {
        InitializeComponent();
        this.Load += FormMain_Load;
    }
    private void FormMain_Load(object sender, EventArgs e)
    {
        FormLogin formLogin = new FormLogin();
        while (formLogin != null)
        {
            if (formLogin.ShowDialog() == DialogResult.OK)
            {
                if (CheckUser(formLogin.Name, formLogin.Password))
                {
                    //присваиваем лейблу имя юзера
                    lblRole.Text = formLogin.Name;
                    //закрываем форму входа
                    formLogin.Close();
                    formLogin = null;
                }
                else
                {
                    MessageBox.Show("Неверное имя или пароль!", "Ошибка",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                if (MessageBox.Show("Закрыть программу?", "Вопрос",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    this.Close();
                    break;
                }
            }
        }
    }
    private bool CheckUser(string name, string password)
    {
        return name.Equals("Вася") && password.Equals("123");
    }
}
Answer 2

Bulson, спс за ответ и ход мыслей, но, наверно я чуток не правильно изъяснился. Вот как обстоят у меня дела. Код формы авторизации:

public partial class frmLogin : Form
    {
        frmMain f1 = new frmMain();
        public frmLogin()
        {
            InitializeComponent();
            Init_Data();
        }
private void btnLogin_Click(object sender, EventArgs e)
        {
            if (comboLogin.Text == "Вася" && txtPass.Text == "1234")
            {
                this.Hide();
                f1.lblRole.Text = comboLogin.Text;
                f1.Show();
            }
else
            {
                txtPass.Clear();
                MessageBox.Show("##########");
            }
            Save_Data();
        }

Тут из comboBox передается имя вошедшего на главную форму в лайбел lblRole. И на главной форме показывает "Вася". Так как я говорил ранее, что присутствует еще UserControl на главной форме, в UserControl живет DataGridView.

Код из UserControl

private void b1_Load(object sender, EventArgs e)// L O A D
        {
            this.addZayavkiTableAdapter.Fill(this.zayavkiDataSet.addZayavki);
            frmMain fm = new frmMain();
            if (fm.lblRole.Text == "Вася")
            {
                tsbSave.Enabled = false;
                btnDelete.Enabled = false;
                zayavkiDGV.ReadOnly = true;
                bindingNavigatorAddNewItem.Enabled = false;
            }
        }

При отладке видно, что UserControl получил не пользователя "Вася", а то, что задано в свойствах lblRole на главной форме

Беда то заключается в том, что я не могу в UserControl'e получить имя, а получаю свойства лейбела, тоисть UserNone.

READ ALSO
Алгоритм “пузырьковой” сортировки

Алгоритм “пузырьковой” сортировки

Это моя попытка реализации, сортировки "пузырьком"Я только учусь программированию, потому не судите строго

206
Сортировка DataGrid WPF

Сортировка DataGrid WPF

Я хочу сделать DataGrid с сортировкой и добавлением Item в середину базы

191
Работа с исключениями

Работа с исключениями

Подскажите, как в случае попадания на исключения вернуться к повторному набиранию числа?

199
Зачем в методе cancellationtoken.register параметр object state?

Зачем в методе cancellationtoken.register параметр object state?

Зачем в методе cancellationtokenregister параметр object state и как его можно использовать? CancellationToken

156