C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: comboboxのitem


(過去ログ 154 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■89417 / inTopicNo.1)  comboboxのitem
  
□投稿者/ 34 (10回)-(2018/11/27(Tue) 14:54:42)

分類:[C#] 

VB.NET→C#への移植作業をしているプログラミング初心者です。

VB.NET)

Public ComboBox1SelectedIndex As Integer

s0 = Form1.ComboBox1.GetItemText(.ComboBox1.Items(ComboBox1SelectedIndex))

このコードをコンバートし、手直ししたのが下記のコードです。

C#)

public int ComboBox1SelectedIndex;

s0 = this.comboBox1.GetItemText(this.comboBox1.Items(ComboBox1SelectedIndex));


comboBox1.ItemsのItemsの所に赤い波線のエラーが出てしまいます。
エラーの内容は「実行不可能なメンバー"comboBox1.Items"をメソッドのように実行する事は出来ません。」と表示されます。
どうすれば解決しますでしょうか。宜しくお願いします。

引用返信 編集キー/
■89418 / inTopicNo.2)  Re[1]: comboboxのitem
□投稿者/ 魔界の仮面弁士 (1955回)-(2018/11/27(Tue) 15:36:41)
2018/11/27(Tue) 16:04:04 編集(投稿者)

No89417 (34 さん) に返信
> VB.NET→C#への移植作業をしているプログラミング初心者です。

プログラミング初心者とのことですが、どの程度のレベルでしょうか。
質問状況をみると、プロパティとメソッドの区別が出来ていないように見受けられますが…。


移植作業を行うに当たっては、移植元ソースの動作に対する十分な知識と、
双方の言語に関する基本知識が求められます。

変換ツール等があれば機械的な直訳で対応できるケースもあるのですが、
それでは十分ではない(あるいは回りくどい)結果になることも屡々です。


> comboBox1.ItemsのItemsの所に赤い波線のエラーが出てしまいます。

VB でいうところの
 Dim i As Integer = ComboBox1.SelectedIndex 'SelectedIndex プロパティ
 '
 ' Dim co As ComboBox.ObjectCollection = ComboBox1.Items 'Items プロパティ
 ' Dim o As Object = co(i) 'co.Item(i) と同義(既定のプロパティ)
 '
 Dim o As Object = ComboBox1.Items(i) 'Items プロパティ + 既定のプロパティ
 Dim s As String = ComboBox1.GetItemText(o) 'GetItemText メソッド
は、C# においては、
 int i = comboBox1.SelectedIndex; // SelectedIndex プロパティ
 //
 // ComboBox.ObjectCollection co = comboBox1.Items; // Items プロパティ
 // object o = co[i]; // インデクサ(既定のプロパティ)
 //
 object o = comboBox1.Items[i]; // Items プロパティ + インデクサ
 string s = comboBox1.GetItemText(o); // GetItemText メソッド
になります。


ゆえに今回のコードについては、
> s0 = this.comboBox1.GetItemText(this.comboBox1.Items(ComboBox1SelectedIndex));
ではなく、
 s0 = this.comboBox1.GetItemText(this.comboBox1.Items[ComboBox1SelectedIndex]);
となります。


ただし、.Items[ ComboBox1SelectedIndex ] において、
ComboBox1SelectedIndex が「0 以上、.Items.Count 未満」に
なっていることが重要です。

この範囲外の値を指定すると、実行時に
『ArgumentOutOfRangeException』の例外で停止していまいます。
(この点は VB でも同じなので、既に対策済みとは思いますが念のため)

ComboBox で何も選択されていない場合、SelectedIndex プロパティが
-1 が返されるという点を考慮したコードになっているかどうか、
念のために確認しておいてください。


> s0 = Form1.ComboBox1.GetItemText(.ComboBox1.Items(ComboBox1SelectedIndex))

元となる VB.NET コードが、あまり移植に向いた書き方になっていない点も気がかりです。

この場合の Form1 は暗黙で生成される『Form の既定のインスタンス』に頼った記述であることが多く、
その場合、Form1.ComboBox1 を Me.ComboBox1 には置き換えられない可能性があります。
(VB で Me. に置き換えられるケースなら、C# では this. への置き換えで良いのですが…)
引用返信 編集キー/
■89487 / inTopicNo.3)  Re[2]: comboboxのitem
□投稿者/ 34 (11回)-(2018/11/30(Fri) 17:02:55)
細かいご指摘ありがとうございました。
まだ数か月程度で隙間の時間でやっているので理解が遅れています。
無事、解決しました。助かりました。

No89418 (魔界の仮面弁士 さん) に返信
> 2018/11/27(Tue) 16:04:04 編集(投稿者)
>
> ■No89417 (34 さん) に返信
>>VB.NET→C#への移植作業をしているプログラミング初心者です。
>
> プログラミング初心者とのことですが、どの程度のレベルでしょうか。
> 質問状況をみると、プロパティとメソッドの区別が出来ていないように見受けられますが…。
>
>
> 移植作業を行うに当たっては、移植元ソースの動作に対する十分な知識と、
> 双方の言語に関する基本知識が求められます。
>
> 変換ツール等があれば機械的な直訳で対応できるケースもあるのですが、
> それでは十分ではない(あるいは回りくどい)結果になることも屡々です。
>
>
>>comboBox1.ItemsのItemsの所に赤い波線のエラーが出てしまいます。
>
> VB でいうところの
>  Dim i As Integer = ComboBox1.SelectedIndex 'SelectedIndex プロパティ
>  '
>  ' Dim co As ComboBox.ObjectCollection = ComboBox1.Items 'Items プロパティ
>  ' Dim o As Object = co(i) 'co.Item(i) と同義(既定のプロパティ)
>  '
>  Dim o As Object = ComboBox1.Items(i) 'Items プロパティ + 既定のプロパティ
>  Dim s As String = ComboBox1.GetItemText(o) 'GetItemText メソッド
> は、C# においては、
>  int i = comboBox1.SelectedIndex; // SelectedIndex プロパティ
>  //
>  // ComboBox.ObjectCollection co = comboBox1.Items; // Items プロパティ
>  // object o = co[i]; // インデクサ(既定のプロパティ)
>  //
>  object o = comboBox1.Items[i]; // Items プロパティ + インデクサ
>  string s = comboBox1.GetItemText(o); // GetItemText メソッド
> になります。
>
>
> ゆえに今回のコードについては、
>>s0 = this.comboBox1.GetItemText(this.comboBox1.Items(ComboBox1SelectedIndex));
> ではなく、
>  s0 = this.comboBox1.GetItemText(this.comboBox1.Items[ComboBox1SelectedIndex]);
> となります。
>
>
> ただし、.Items[ ComboBox1SelectedIndex ] において、
> ComboBox1SelectedIndex が「0 以上、.Items.Count 未満」に
> なっていることが重要です。
>
> この範囲外の値を指定すると、実行時に
> 『ArgumentOutOfRangeException』の例外で停止していまいます。
> (この点は VB でも同じなので、既に対策済みとは思いますが念のため)
>
> ComboBox で何も選択されていない場合、SelectedIndex プロパティが
> -1 が返されるという点を考慮したコードになっているかどうか、
> 念のために確認しておいてください。
>
>
>>s0 = Form1.ComboBox1.GetItemText(.ComboBox1.Items(ComboBox1SelectedIndex))
>
> 元となる VB.NET コードが、あまり移植に向いた書き方になっていない点も気がかりです。
>
> この場合の Form1 は暗黙で生成される『Form の既定のインスタンス』に頼った記述であることが多く、
> その場合、Form1.ComboBox1 を Me.ComboBox1 には置き換えられない可能性があります。
> (VB で Me. に置き換えられるケースなら、C# では this. への置き換えで良いのですが…)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -