【问题标题】:WinForm Application Get value from dynamic textboxWinForm 应用程序从动态文本框中获取值
【发布时间】:2017-06-16 00:56:00
【问题描述】:

这对我来说最近真的很挣扎,因为这是我现在最需要的。我为登录表单创建了 2 个动态文本框,如果我点击登录按钮,我想从文本框中获取值。我在互联网上搜索了可能的值,但它们似乎都不适合我。按钮和文本框是在不同的类中制作的,这对我来说是痛苦的部分。我无法从表单上的文本框中将值传递给制作按钮的类中的事件处理程序。如果有人可以帮助我完成这个,那么我可以继续我的项目并很快完成它。

我也会为你留下一些代码。这些部分将是按钮和文本框以及主窗体的类。

主窗体

            x_loc = 0;
            y_loc = 80;
            x_size = 100;
            y_size = 20;

            foreach(string item in lon.loginLbls())
            {
                clsLbl = new Labels(pnlMenu, x_loc, y_loc, x_size, y_size, item);
                y_loc += 50;
            }

            x_loc = 0;
            y_loc = 100;
            x_size = 200;
            y_size = 30;

            foreach(string item in lon.loginForm())
            {
                clsTxt = new Textboxes(pnlMenu, x_loc, y_loc, x_size, y_size, item);
                y_loc += 50;
            }


            x_loc = 0;
            y_loc = 200;
            x_size = 200;
            y_size = 30;
            foreach(string item in lon.loginBtns())
            {
                clsBtn = new Buttons(pnlMenu, x_loc, y_loc, x_size, y_size, item);
                y_loc += 50;
            }

按钮类

Button btn;



public Buttons(Panel parent, int x_loc, int y_loc, int x_size, int y_size, string name)
    {
        btn = new Button();
        btn.Location = new Point(x_loc, y_loc);
        btn.Size = new Size(x_size, y_size);
        btn.Text = name;
        btn.Name = name;
        btn.Click += new EventHandler(btnHandler);
        btn.ForeColor = Color.Black;
        btn.BackColor = Color.White;

        parent.Controls.Add(btn);
    }

    private void btnHandler(object sender, EventArgs e)
    {
        Button btn = sender as Button;

        switch (btn.Text)
        {
            case "Login":
                Login lgn = new Login();
                break;

            case "Afsluiten":
                Application.Exit();
                break;

        }
    }

文本框类

TextBox tb;

        public Textboxes(Panel parent, int x_loc, int y_loc, int x_size, int y_size, string name)
        {
            tb = new TextBox();
            tb.Location = new Point(x_loc, y_loc);
            tb.Size = new Size(x_size, y_size);
            tb.Name = name;
            tb.ForeColor = Color.Black;
            tb.BackColor = Color.White;

            parent.Controls.Add(tb);
        }

列表

public List<string> loginBtns()
        {
            List<string> lgnBtns = new List<string>();
            lgnBtns.Add("Login");

            return lgnBtns;
        }

        public List<string> loginForm()
        {
            List<string> lgnForm = new List<string>();
            lgnForm.Add("username");
            lgnForm.Add("password");

            return lgnForm;
        }

        public List<string> loginLbls()
        {
            List<string> lgnLbl = new List<string>();
            lgnLbl.Add("Code");
            lgnLbl.Add("Wachtwoord");

            return lgnLbl;
        }

注意:所有这些方法都位于不同的类中。

【问题讨论】:

  • 你真的应该避免创建一个像 WinForms 库中的类一样的类
  • 您能再深入一点解释一下吗?

标签: c# winforms oop textbox


【解决方案1】:

你有两条路可以走:

1.将文本框上的创建公开:

partial class form1{
     TextBox tb = new TextBox();
...
}

然后可以在任何你喜欢的地方获取它的文本:

string a = tb.Text;

2.获取父级的文本框控件:

TextBox[] tb = parent.Controls.OfType<TextBox>().ToArray();

现在您的数组中有文本框。您可能想使用标签来识别它们:

  string a = tb.FirstOrDefault(t=>(string)t.Tag=="username").Text;

当然在这种情况下你必须在添加文本框时设置Tag

【讨论】:

  • 谢谢,我现在就试试这个,看看这个解决方案是否成功。
  • 问题在哪里应用第二个选项?我尝试在按钮类中使用它,但收到以下错误消息:'Queryable.OfType(IQueryable)' is a method, which is not valid in the given context Kassa'
  • opps 代码缺少括号。我刚刚编辑了它。请看一下。 OfType&lt;TextBox&gt; 应该是:OfType&lt;TextBox&gt;()
  • 感谢您的快速回复。我会改变,看看结果会怎样。
  • 好的,代码现在正在运行,但是当它进入:字符串 a = tb.FirstOrDefault(t=>(string)t.Tag=="username") 时,我得到了 NullRefferenceException。文字;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
相关资源
最近更新 更多