如何访问progressBar?

时间:2014-05-14 18:14:40

标签: c# winforms windows-forms-designer

在我的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
}

2 个答案:

答案 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!
}