私はC#をよく使っていません。論理を理解できません。しかし、VBは、はるかに論理的なので、私はよく理解しているようです。私には少なくとも。だから私は、あなたが現在でいる、その後1異なるフォーム上のコントロールにアクセスして、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'とは別の意味を持ちますが、これは既に別のものを示すために '子'スコープで使用されています。
は、行を削除すると、私は次のエラーを与える:
「オブジェクト参照が非静的フィールド、メソッド、またはプロパティのために必要とされる 『NAudio.SoundProperties.comboBoxAsioDriver』」
をここでは、これらの行を追加した後のコードです2つの場所で:
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(表示されないため、不可視なので)の束になります。 – DataDink
あなたのインスタンス名はあなたのクラス名とまったく同じですが、これはc#の正当なコードですが、混乱を避けるためにインスタンス名を変更する方が良いでしょう。 – Mez