C#有一點新鮮感,並且接近我之外的某些東西。道歉的長度。如何與其他班級的表單控件進行通信?
我在Visual Studio C#Express中有一個Windows窗體應用程序,使用默認類VS spawns。我想從除聲明它的默認Form1以外的類開始並停止一個Marquee樣式progressBar。 這些似乎令人驚訝的困難,我相信我錯過了一些重要的東西。
我的項目具有Visual Studio自動生成的常用類: Form1.cs,Form1.Designer.cs,Program.cs。 我加了myClass.cs想說說加載條。 我將progressBar1欄添加到我的表單中,使用設計器設置Style:Marquee。
在Form1.cs中「表()構造函數,我寫
this.progressBar1.Visible = false;
這工作。 Intellisense'看到'progresBar1。 代碼Form1.cs中可以查看和控制progressBar1在Form1.Designer.cs聲明。 這對我有意義。
但是,需要啓動和停止加載欄的功能必須存在於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中鍵入代碼時,智能感知無法'看到'progresBar1。 事實上,智能感知不能「看」從myClass.cs內Form1.cs中什麼。 沒有公共propeties或功能添加到Form1永遠變得可見intellisense。 這對我來說沒有意義,我很困惑。 這似乎是你想要經常和輕鬆地做的事情。
一些搜索表明,這種對Form控件的外部訪問阻塞是有意設計的。有些東西與你的邏輯代碼與GUI代碼「解耦」,這在理論上是有意義的。所以顯然有一個預期的方法,但很難找到一個明確的例子。我只能找到完全在聲明它們的表單中控制的loadbars的示例,或者簡單地說明有關創建和註冊事件或使用Invoke或我知之甚少的其他事情的一半示例。有許多明顯的解決方案,但是我看不到的東西顯然適用於我,或者我能夠以我的無知來實施。
我想我可以做到這一點,如果我的表單是一個實例。 [編輯]不。實例與否,Form1控件永遠不會暴露在Form1的之外。CS
那麼,如何啓動和停止從不是缺省Form1中在聲明它之外的類跑馬燈式的進度,以正確的方法是什麼? 有沒有一個清晰有用的例子?
你在哪裏創建myClass的實例? Form1的內部代碼? – Steve
myClass是一個單獨的類,不在Form1中。這是一個大班,需要時間做許多事情。我在解決方案資源管理器中使用「添加類」來添加它。它與Program.cs和所有其他類共享其名稱空間。 –
檢查此答案的鏈接[如何訪問另一個窗體中的控件](https://stackoverflow.com/a/38898134/7675357)。 –