我不擅長C#,我只是不懂邏輯。但VB似乎更好地理解,因爲它看起來更合乎邏輯。至少我。在另一個表單上訪問/設置控件
所以我碰到一些東西,是沒有問題的VB可言,訪問不同的形式,那麼一個目前在你的控制。
在VB中,如果我想設置在Form2中,按鈕的狀態。我只是鍵入以下內容:
Form2.Button1.Text = "Text"
在C#中我似乎無法做到這一點。爲什麼?這個權利一定有充分的理由嗎?
編輯:所以如果我有這個代碼,它能看到另一個窗體上的控件的樣子是什麼?
if (!AsioOut.isSupported())
{
SoundProperties.radioButtonAsio.Enabled = false;
SoundProperties.buttonControlPanel.Enabled = false;
SoundProperties.comboBoxAsioDriver.Enabled = false;
}
else
{
// Just fill the comboBox AsioDriver with available driver names
String[] asioDriverNames = AsioOut.GetDriverNames();
foreach (string driverName in asioDriverNames)
{
SoundProperties.comboBoxAsioDriver.Items.Add(driverName);
}
SoundProperties.comboBoxAsioDriver.SelectedIndex = 0;
}
只是想添加這個「SoundProperties SoundProperties =新SoundProperties(); 而我得到訪問控制,但我需要補充的這段代碼在這個if語句的兩個部分。?好像我做了,不過,增加該行的代碼不會做任何事情昂的最後一部分給我的錯誤信息:
「名爲‘SoundProperties’的局部變量不能在此範圍內,因爲它宣佈會給'SoundProperties'賦予不同的含義,'SoundProperties'已經被用在'子'範圍內來表示別的東西「
卸下行給出我以下錯誤:
「的對象引用是所必需的非靜態字段,方法或屬性‘NAudio.SoundProperties.comboBoxAsioDriver’」
下面的代碼添加這些行之後在兩個地方:
if (!AsioOut.isSupported())
{
SoundProperties SoundProperties = new SoundProperties();
SoundProperties.radioButtonAsio.Enabled = false;
SoundProperties.buttonControlPanel.Enabled = false;
SoundProperties.comboBoxAsioDriver.Enabled = false;
}
else
{
// Just fill the comboBox AsioDriver with available driver names
String[] asioDriverNames = AsioOut.GetDriverNames();
foreach (string driverName in asioDriverNames)
{
SoundProperties SoundProperties = new SoundProperties();
SoundProperties.comboBoxAsioDriver.Items.Add(driverName);
}
SoundProperties SoundProperties = new SoundProperties();
SoundProperties.comboBoxAsioDriver.SelectedIndex = 0;
}
所以您的編輯 - 每次你做一個「新SoundProperties()」你實際上是創建SoundProperties窗口的新副本 - 你想之外創建你的「IF」語句,以便您正在訪問同一個副本你的if,else和foreach塊。這與「範圍」有關 - 我想如果你閱讀了「變量範圍」,這將有助於理解這裏發生的事情。如果你運行上面的代碼,你最終會得到一大堆隱形的SoundProperties(隱形,因爲你從來沒有.Show)。 – DataDink 2009-08-28 22:31:39
您的實例名稱與您的類名稱完全相同,儘管這是c#中的合法代碼,但最好更改實例名稱以避免混淆。 – Mez 2009-08-29 00:12:25