【问题标题】:Populate Buttons With Database Values c# [closed]使用数据库值填充按钮 c# [关闭]
【发布时间】:2015-06-15 18:47:57
【问题描述】:

大家好,我有一个数据库,我们将使用一个简单的 database.txt 作为参考

Text Database For Population 
Peter,Pan
James,Dean
Hal,lo
Calc,exe
Mad,Hatter
Patterson,Matthiew

我希望能够添加一个包含例如

的按钮
 [Peter] , [James], ext ext

对于每次读取数据库,考虑到我必须为从数据库读取的每个新名称创建一个按钮,我将如何在这种情况下向人群施压

提前致谢

附: 最初我使用带有以下代码的下拉菜单

        List<MDB.Userdb> packObjects = new System.Collections.Generic.List<MDB.Userdb>();
        string colname = "UserRef";
        try
        {
            packObjects = MDB.User.RetrieveList();


            if (!dgvData.Columns.Contains(colname))
            {
                DataGridViewComboBoxColumn cb = new DataGridViewComboBoxColumn();
                cb.DataPropertyName = colname;
                cb.Name = colname;
                cb.HeaderText = colname;
                cb.DataSource = packObjects;
                cb.ValueMember = "Idx";
                cb.DisplayMember = "UserName";
                dgvData.Columns.Add(cb);
            }
            else
            {
                //refresh data in drop down
                DataGridViewComboBoxColumn ocb = (DataGridViewComboBoxColumn)dgvData.Columns[colname];
                ocb.DataPropertyName = colname;
                ocb.Name = colname;
                ocb.HeaderText = colname;
                ocb.DataSource = packObjects;
                ocb.ValueMember = "Idx";
                ocb.DisplayMember = "UserName";
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Unable to Retrieve User Detials " + ex.Message, "Retrieve User Detials", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

注意事项: WinForms C# .Net4.0

【问题讨论】:

  • 我从中得到的是:您想为文本数据库中的所有人创建按钮,对吗?以前您已经使用 Drop down 完成了。
  • @SandeepKushwah 你是对的,这就是我试图做的事情
  • 你都试过什么?谷歌搜索?你提到的任何链接?请将它们粘贴在这里。
  • 我已经尝试过使用谷歌搜索,但我不知道如何解决这个问题,这就是为什么我问这个问题,我是否应该使用按钮标题大小和参数创建一个事件,然后将数据库中的名称读入 anlit并将它们一一添加到按钮中?
  • 您访问过的任何链接请粘贴在这里。

标签: c# .net winforms


【解决方案1】:
StreamReader menu = new StreamReader("database.txt");
        int repetition = 0;

        while (!menu.EndOfStream)
        {
            Button dynamicbutton = new Button();
            dynamicbutton.Click += new System.EventHandler(menuItem_Click);
            dynamicbutton.AutoSize = true;
            dynamicbutton.Text = menu.ReadLine();
            dynamicbutton.Visible = true;
            dynamicbutton.Location = new Point(4 + repetition * 307, 4);
            dynamicbutton.Height = 24;
            dynamicbutton.Width = dynamicbutton.Text.Length * 20;
            dynamicbutton.BackColor = Color.FromArgb(0, 0, 0);
            dynamicbutton.ForeColor = Color.White;
            dynamicbutton.Font = new Font("Arial", 7);
            dynamicbutton.Show();
            splitContainer1.Panel1.Controls.Add(dynamicbutton);
            repetition++;
        }
        menu.Close();

这在 MenuItem_Click 事件中有一些额外的东西可以解决问题,我还可以检索按钮的名称等等

【讨论】:

  • 我已经检查了这个解决方案,但它不能正常工作。new point 行有问题。所以用我建议的替换那行。
  • @SandeepKushwah 我确实添加了你建议的观点,它出现在这个 peter {EnterTab] james{enterTab] 没有这样做的地方,但请把你的答案作为答案发布,这样我就可以了将此标记为已解决
  • 我很高兴你终于得到了你想要的东西。 :)
【解决方案2】:

你可以试试下面的代码:

for (int i = 0; i < 5; i++)
        {
            Button newPanelButton = new Button();
            newPanelButton.Name = "txtRuntime" + i;
            newPanelButton.Text = "Runtime"+i;
            newPanelButton.Location = System.Drawing.Point.Add(new Point(4 + i * 307, 4), new Size(20, 20));// here make use of your logic.

            this.Controls.Add(newPanelButton);
        }

【讨论】:

  • 再次感谢您的帮助,非常感谢
猜你喜欢
  • 2011-11-24
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2012-04-21
相关资源
最近更新 更多