我想做什么:
Form1
表单上的BarCode搜索产品; Inventory
表单
2.按名称或说明搜索产品ListView click
上,将其BarCode粘贴到Form1
条形码文本框中。 所有这一切都是完成的。问题是每次我从Inventory
添加产品时,都会打开 new Form1
。
这些值不会在同一Form1
中处理,因此我假设我销售了4种产品:
Form1
条形码搜索Inventory
搜索表单最后,我获得了3个打开的Form1
表单,一个包含2个产品,两个表单包含单个产品(通过Inventory
表单添加)。我需要他们在一起。
由于
// ------------------------- Form1中------------------- -------------------------
private void btnInventory_Click(object sender, EventArgs e)
{
Inventory Inventory = new Inventory();
Inventory.Show();
}
private string _theValue;
public string TheValue
{
get
{
return _theValue;
}
set
{
_theValue = value;
txtItems.Text = value;
}
}
// -----------------------------库存--------------- ------------------
private void ShowForm1()
{
string value = label9.Text;
Form1 newForm = new Form1();
newForm.TheValue = value;
this.Close();
newForm.ShowDialog();
}
private void lvList_Click(object sender, EventArgs e)
{
label9.Text = lvList.SelectedItems[0].SubItems[0].Text;
this.ShowForm1();
}
我很抱歉延迟,我不得不等待8小时再发布
感谢您的回复。
我只是试过了 的 Form1中
private void btnInventory_Click(object sender, EventArgs e)
{
Inventory _inv = new Inventory();
if (DialogResult.OK == _inv.ShowDialog())
{
txtItems.Text = _inv.fugi;
}
}
并在库存表格中
private string test;
public string fugi
{
get { return test; }
set { test = label9.Text; }
}
private void lvList_Click(object sender, EventArgs e)
{
label9.Text = lvList.SelectedItems[0].SubItems[0].Text;
this.DialogResult = DialogResult.OK;
this.Close();
}
txtItems.Text 未从库存表单中获取测试的值
答案 0 :(得分:1)
它打开一个新的对话框,因为你在ShowForm1
告诉它,我个人会更改你的btnInventory点击如下
private void btnInventory_Click(object sender, EventArgs e)
{
Inventory _inv = new Inventory();
if(DialogResult.OK == Inventory.ShowDialog())
{
valueIWantToSet = _inv.Accessor;
}
}
访问者你需要让自己与
相似public TypeOfVar Accessor
{
get{return m_privateVariableThatIWillMakeAndSetToMyBarcode;}
}
编辑:
获得条形码的价值后,您需要将DialogResult
设置为关注
this.DialogResult = DialogResult.OK;
然后在关闭表单之前设置您希望访问条形码的变量
EDIT2:
您的ShowForm1
最终会与此类似(可能要重命名此方法!)
{
this.DialogResult = DialogResult.OK;
m_myVar = SelectedItem..;
this.Close;
}
更新答案
你仍然遇到问题,因为你没有正确使用set
属性,你的获得很好。 c#中有一个名为value
的关键字,应该用于设置者。这个值将取一个=符号右边的值...你可以这样想......
fugi = label9.Text
在上面一行中,fugi
正在使用您的属性getter,以获取需要设置为label9.Text
的值。 =
符号表示您打算对此属性使用setter,并将value
的值设置为label9.Text
。
使用带有getter和setter的属性,因此您不必将基础变量的访问权提供给您不想要的地方,然后可以根据需要选择设置或获取此变量。
这意味着您的问题仍然存在,您还没有设置test
的值,它仍然是默认的字符串值。
所以你有几种方法可以解决你的问题。
第一种方法是为label9.Text提供一个getter并删除对私有变量的需求。
public string Fugi //Properties should really start with capital letter
{
get{return label9.Text;}
}
第二个是在btnInventoryClick中调用getter之前设置test的值并删除setter方法
private void lvList_Click(object sender, EventArgs e)
{
test = label9.Text;
,第三个是设置test
,如方法2所示,但也将Fugi的set方法更改为以下内容,以允许在其他地方设置此测试变量。
set{text = value;}