DOBON.NET DOBON.NETプログラミング掲示板過去ログ

お手数ですがc#をVBに変換をお願いします。

環境/言語:[Windows XP]
分類:[.NET]

今日は いつも勉強させて頂いています。

リストビューで各行別に列数を変えることが出来る方法を検討しています。
参考コードをここで紹介していただき、入手し解析中です。
開発環境がVB.Netで入手コードはC#です。(私の開発環境ではC#は動作しません。)
(私はc#のコードは解りませんがVBと似ていると言う事で勘で解析中)
このサイトで紹介されている変換サイトを使ってVBに変換していますが
かなりな変換エラーが発生し、エラーを元のC#コードを見ながら勘で修正しています。
従って、元のC#コードの意味も解らず、変換後のVBも動作するか不明な状態です。
とりあえず全ての変換エラーを修正し、その後動作確認する予定ですが
次のc#のコードをVBに変換できません。
お手数ですがc#をVBに変換して頂けないでしょうか?

C#コード

_autoGroupList.Clear();
foreach(XPListViewItem itm in this.Items){
if ( !_autoGroupList.Contains(itm.SubItems[columnID].Text == "" ? _emptyAutoGroupText : itm.SubItems[columnID].Text)) {

_autoGroupList.Add(itm.SubItems[columnID].Text == "" ? EmptyAutoGroupText : itm.SubItems[columnID].Text);
}
}

変換後のVBコード(エラー発生しています)

_autoGroupList.Clear()
Dim itm As XPListViewItem
For Each itm In Me.Items
If Not _autoGroupList.Contains((If itm.SubItems(columnID).Text = "" Then _emptyAutoGroupText Else itm.SubItems(columnID).Text)) Then 'ToDo: Unsupported feature: conditional (?) operator.

_autoGroupList.Add((If itm.SubItems(columnID).Text = "" Then EmptyAutoGroupText Else itm.SubItems(columnID).Text)) 'ToDo: Unsupported feature: conditional (?) operator.
End If
Next itm


変換後のVBコードで
If の内側に If がありその Then 〜 Else 〜 の〜の部分が式でなくフィールドまたは
itm.SubItems(columnID).Text) になっています。
この部分を普通の
If 〜 Then
If 〜 Then

End If
End If
の形式にすれば解決です。
_autoGroupList はArrayListです。
_emptyAutoGroupTextはPrivate _emptyAutoGroupText As String = "" で定義されています。
元のC#の意味が不明の為すみませんがお願いします。
2004/11/11(Thu) 14:54:32 編集(投稿者)

・質問内容が漠然としすぎ。
・デバッグ依頼に近い。

http://dobon.net/vb/bbs/index.html



そういうのはこっちの方がいいと思うけど・・・
違うかな?

http://dobon.netfirms.com/cgi-bin/kirakubbs/cbbs.cgi
2004/11/11(Thu) 15:10:59 編集(投稿者)

たかだか数行の話なので。

まず、
Dim itm As XPListViewItem
For Each itm In Me.Items
は
For Each itm As XPListViewItem In Me.Items
と1行で書けます。
スコープの点から考えてもこう記述したほうがいいでしょう。

C#の『? :』演算子はVB.NETではIIf関数と同じです。
と考えると、For Each ループの中は次のように書けます。

If Not (_autoGroupList.Contains( _
        IIf(itm.SubItems(columnID).Text = "", _emptyAutoGroupText, itm.SubItems(columnID).Text))) Then
    _autoGroupList.Add( _
        IIf(itm.SubItems(columnID).Text = "", EmptyAutoGroupText, itm.SubItems(columnID).Text))
End If

以下を参考にして下さい。
http://dobon.net/vb/dotnet/vb2cs/vbiif.html
■No7301に返信(rakiさんの記事)
> 2004/11/11(Thu) 15:10:59 編集(投稿者)
>

rakiさん 有難うございました。
恥ずかしい話ですが IIf 文を知りませんでした。
変換サイトでは If 文で変換されていたため
VBで構文エラーとなりお手上げ状態でした。
適当にVBに翻訳すると多分間違っていたと思います。
#初心者にはこのようなアドバイスは非常に嬉しくなります。

■7300 匿名さんへ
ご迷惑をおかけしました。
マナー違反にならないよう気をつけたつもりでしたが
マナー違反になったようですね。
今後気をつけます。
初心者に優しくして下さいね?お願いします。
解決済み!
■No7302に返信(平ちゃんさんの記事)
> ご迷惑をおかけしました。
> マナー違反にならないよう気をつけたつもりでしたが
> マナー違反になったようですね。
> 今後気をつけます。
> 初心者に優しくして下さいね?お願いします。

せっかく管理人さんも書いてくださってるから・・・ と思ったのです。
http://dobon.net/vb/dotnet/vb2cs/index.html

// まあ、ちゃんと誘導しなかった自分も悪いですね。
// 気をつけます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板