【问题标题】:Going back to the same form and updating info返回相同的表单并更新信息
【发布时间】:2015-03-03 17:18:23
【问题描述】:

我正在制作一个相当简单的库存程序,但我不知道如何将数据添加到原始主窗体中。

在主窗体上,我有一个添加项目的按钮及其详细信息(additem)。用户单击“添加”按钮后,应将输入的信息放入主窗体上的四个 DGV 之一。这可以正常工作,但是,每次添加新项目时,都会将其添加到主窗体的新实例中,而前一个实例(带有前一个项目条目)会被丢弃。

这是主窗体上“添加项目”按钮的代码:

additem form1 = new additem();
this.Hide();
form1.ShowDialog();
this.Visible = true;
this.Refresh();

这是用户点击“添加”时additem表单的代码:

invmain invmainobject = new invmain();

//Work done here...

this.DialogResult = DialogResult.OK;
invmainobject.Show(); 

如何让信息显示在原始实例上并更新表单,以便新条目出现在 DGV 中?

【问题讨论】:

    标签: c# winforms add


    【解决方案1】:

    您的 additem 表单中应该有一个公共属性,例如:

    public invmain CreatedItem { get; private set; }
    
    ...
    
    this.DialogResult = DialogResult.OK;
    this.CreatedItem = invmainobject;
    

    然后在您的主窗体中访问该属性,如下所示:

    form1.ShowDialog();
    AddItem(form1.CreatedItem);
    

    【讨论】:

    • 我没用过get,set;我究竟如何在我的代码中实现它?这只是我编程的第一周。
    • 属性非常有用。您应该阅读它们:msdn.microsoft.com/en-us/library/x9fsa0sw.aspx,尤其是关于自动实现属性的部分:msdn.microsoft.com/en-us/library/bb384054.aspx
    • 我想我已经实现了它,但是当我运行它时,我在这行代码上得到一个错误:additem(form1.CreatedItem); ...它说“additem 是一种'类型',但它被用作'变量'”。请注意,我的 invmain 表单代码保持不变,除了我在您的回答之后添加的那段代码:form1.ShowDialog();
    【解决方案2】:

    (附加表格):

    public invmain CreatedItem { get; private set; 
    
            //"Add" button click event
    
            //work done here to direct the info user entered to appropriate DGV
            this.DialogResult = DialogResult.OK;
            this.Dispose();
            this.CreatedItem = invmainobject;
    

    (invmain 表格)

            //"Add Item" button->takes user to additem form
    
            additem form1 = new additem();
            form1.ShowDialog();
            additem(form1.CreatedItem);
            this.Visible = true;
            this.Refresh();
    

    【讨论】:

    • 添加,additem 被用作函数,additem(form1.CreatedItem)。当我在下面写下它时,我的意思是作为你想对来自form1 的项目做的任何事情的存根。 form1.CreatedItem 里面有你的对象,你应该用你想对那个对象做的任何事情替换那行。
    • 我不明白如何实施您的解决方案。我已经发布了“additem”页面的所有代码,如果有帮助的话。
    • 现在,我只是试图从“additem”表单中移动三条信息:类别、项目和数量。我如何使用您的代码将这些返回到相应的 DGV 并显示项目和数量?我已经发布了“additem”页面上的所有代码。
    • 如何使这行代码:additem(form1.CreatedItem),实际添加到DataGridView中?
    • 这个问题在别处得到解答:stackoverflow.com/questions/10063770/…
    【解决方案3】:
    private void quantitybox_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !(char.IsDigit(e.KeyChar) || e.KeyChar == '\b'); //OR: e.KeyChar==8
        }
    
        public invmain CreatedItem { get; private set; }
    
        public void add_Click(object sender, EventArgs e)
        {           
    
    
            //SWITCH STATEMENT FOR DIRECTING USER-ENTERED INVENTORY DATA  
            //TO THE APPROPRIATE TABCONTROL TAB AND DGV<1:4>
    
            //OBJECT REFERENCE TO DGV
            invmain invmainobject = new invmain();
    
            switch(combobox1.SelectedIndex)
            {
                case 0: //ELECTRICAL
                    invmainobject.datagridview1.Rows.Add(itembox.Text, quantitybox.Text);
                    break;
                case 1: //MECHANICAL
                    invmainobject.datagridview2.Rows.Add(itembox.Text, quantitybox.Text);
                    break;
                case 2: //CABLES
                    invmainobject.datagridview3.Rows.Add(itembox.Text, quantitybox.Text);
                    break;
                case 3: //MISC.
                    invmainobject.datagridview4.Rows.Add(itembox.Text, quantitybox.Text);
                    break;
                default:
                    MessageBox.Show("Please select a category.\t\t", "Required Field Missing", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    combobox1.Focus();
                    return;
            }
    
            if (string.IsNullOrWhiteSpace(this.itembox.Text))
            {
                MessageBox.Show("The 'Item' field is required.\t\t\t", "Required Field Missing", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                itembox.Focus();
                return;
            }
    
            if (string.IsNullOrWhiteSpace(this.quantitybox.Text))
            {
                MessageBox.Show("The 'Quantity' field is required.\t\t\t", "Required Field Missing", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                quantitybox.Focus();
                return;
            }
    
            this.DialogResult = DialogResult.OK;
            this.Dispose();
            this.CreatedItem = invmainobject;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2016-05-19
      • 2013-02-26
      • 2016-09-28
      相关资源
      最近更新 更多