在我的WindowsForms程序中,我有一个 MainForm ,其中包含 ProgressBar 。在 ChildForm 中,我想更改它的值,但是我收到了错误:
“int”不包含“Value”的定义。无法找到扩展方法“Value”,取第一个类型为“int”的参数(缺少using指令或汇编引用?)
主要表格:
public int ProgressBar5
{
get { return progressBar5.Value; }
set { progressBar5.Value = value; }
}
儿童表格:
static MainForm mainForm = new MainForm();
private void button1_Click(object sender, EventArgs e)
{
mainForm.ProgressBar5.Value++; // Error
}
EDIT1: 在主要形式中, progressBar5 的值始终等于 1 。可能是什么原因?我想,静态可以修复它。
主要表格:
private void button9_Click(object sender, EventArgs e)
{
Child child = new Child();
child.ShowDialog();
MessageBox.Show(progressBar5.Value.ToString()); // All time Value = 1
}
答案 0 :(得分:3)
您的ProgressBar5
媒体资源已经负责访问进度条的Value
属性。它不会返回进度条,而是返回当前进度。这意味着调用者不需要访问结果的Value
属性(因为没有)。
只需写下:
mainForm.ProgressBar5++;
当然,为了清楚起见,最好调用这样的属性CurrentProgress
而不是ProgressBar
,因为它不返回一个进度条,它返回(或设置)当前进度。
当然,最好还是让孩子根本不了解主要形式。子表单本身可以接受IProgress
实例,而不是传入主表单。然后,它可以向任何创建此表单的人员报告进度,无论是您的主要表单还是其他任何内容。然后,主要表单负责在报告进度时执行任何操作,可以在事件处理程序或传递给Progress
构造函数的委托中定义。
答案 1 :(得分:1)
问题是你有两个名字相似的变量,引起了很多混乱。当您尝试访问ProgressBar5
变量时,您实际上获得了在第一个片段中声明的int属性。
由于int没有Value
属性,因此会出现编译时错误。将您的代码更改为:
static MainForm mainForm = new MainForm();
private void button1_Click(object sender, EventArgs e)
{
mainForm.ProgressBar5++; // Fixed!
}