【发布时间】:2014-03-13 16:52:23
【问题描述】:
对 C# 有点陌生,并且正在接近我之外的东西。抱歉太长了。
我在 Visual Studio C# Express 中有一个 Windows 窗体应用程序,使用默认类 VS 生成。我想从声明它的默认 Form1 以外的类中启动和停止 Marquee 样式 progressBar。 这些似乎非常困难,我确信我错过了一些重要的东西。
我的项目有 Visual Studio 自动生成的常用类: Form1.cs、Form1.Designer.cs、Program.cs。 我添加了想要谈论加载栏的 myClass.cs。 我使用设计器将 progressBar1 栏添加到我的表单中,设置 Style:Marquee。
在Form1.cs的'Form()构造函数中,我写
this.progressBar1.Visible = false;
这行得通。 Intellisense '看到' progresBar1. Form1.cs 中的代码可以查看和控制 Form1.Designer.cs 中声明的 progressBar1。 这对我来说很有意义。
但是需要启动和停止加载条的函数必须存在于 myClass.cs 中。 我希望能够在 myClass.cs 中编写这样的代码:
public void myFunction(){
Form1.progressBar1.visible=true
//do stuff that takes a bit of time
Form1.progressBar1.visible=false
}
这不起作用。在 myClass.cs 中键入代码时,Intellisense 无法“看到”progresBar1。 事实上,智能感知无法从 myClass.cs. 中“看到”Form1.cs 中的任何内容。 任何添加到 Form1 的公共属性或函数都不会被智能感知看到。 这对我来说没有意义,我很困惑。 这似乎是您想要经常轻松地做的事情。
一些搜索表明,这种阻止对表单控件的外部访问是设计使然。与将逻辑代码与 GUI 代码“解耦”有关,这在原则上是有意义的。所以显然有一种预期的方法,但很难找到一个明确的例子。我只能找到完全在声明它们的表单中控制的加载栏的示例,或者关于创建和注册事件或使用调用或其他我知之甚少的东西的简短示例。有许多明显的解决方案,但没有一个我能清楚地看到适用于我,或者我能够实施,在我的无知中。
如果我的表单是一个实例,我想我可以做到。 [编辑] 不。实例与否,Form1 控件永远不会暴露在 Form1.cs
之外那么,我如何以正确的方式从默认的 Form1 以外的类中启动和停止 Marquee 样式的 progressBar? 在某处是否有明确且有用的示例?
【问题讨论】:
-
在哪里创建 myClass 的实例? Form1的内部代码?
-
myClass 是一个单独的类,不在 Form1 中。这是一门大课,做很多需要时间的事情。我在解决方案资源管理器中使用了“添加类”来添加它。它与 Program.cs 和所有其他类共享其命名空间。
标签: c# .net winforms visual-studio