我不擅长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