none
AxListViewについて RRS feed

  • 質問

  • はじめまして。ジープと申します。

    開発環境は Windows XP Visual Basic.net  Framework 1.1 です。

    先日、VB6で作成したソフトをVB.netの変換ツールで変換したのですが、

    ListViewがAxListViewというものに変換されていました。

    基本がListViewクラスであったため、今まではなんとかやってきたのですが本日ついに行き詰ってしまいました。

     

    AxListViewに、ItemClickというイベントがあるのですが、マウスカーソルをリストビューの上で少し停滞させただけでItemClickというイベントが飛んできてしまいます。(ListView上は選択状態になってしまう)

    対応策を知っている方がおられましたら、ご教授願います…。

     

    補足:AxListView は AxInterop.MSComctlLib を参照すると使えるようになりました。

    2006年12月12日 9:00

回答

  • MicrosoftにAxListViewのItem_Clickイベントが発生してしまう件について問い合わせたところ、AxListView自体の問題ではなくVB6のListView本体に問題があるとの回答を受けました。

    詳しい原因は現在調査中らしいのですが、

    .netではAxListViewをつかわずに、.netに内包されているListViewクラス使ってくれといわれましたので、

    ListViewクラスに変更しました。

     

    じゃんぬねっとさん Hongliangさん ありがとうございました。

    2006年12月19日 7:37

すべての返信

  • ジープ さん、こんにちは。

     ジープ さんからの引用
    先日、VB6で作成したソフトをVB.netの変換ツールで変換したのですが、
    ListViewがAxListViewというものに変換されていました。
    基本がListViewクラスであったため、今まではなんとかやってきたのですが本日ついに行き詰ってしまいました。

    AxListView ではなく、System.Windows.Forms.ListView を素直に使用し、手動コンバートした方が早いと思います。

    2006年12月12日 9:02
  • さっそくの返信ありがとうございます。

     

    AxListView を使っているのは、1行に対して列ごとに文字の色を変更したかったからなのですが…。

    VB.net のListViewで、列ごとに色を変更しようと思ったのですが、なぜかうまくいきませんでした。

    あちこち検索してみたのですが、原因そのものがわからなかったので、AxListViewをそのままつかっていました…。

     

    ちなみに、VB.net で列ごとの色を変更するプログラムは以下のように記述しました。

    Sub Main

        Dim l_strData(2) as String

        l_strData(0) = "ああ”

        l_strData(1) = "いい”

        l_strData(2) = "うう”

        ListView1.Items.Add(New ListViewItem(l_strData))

        ListView1.Items(0).SubItem(1).ForeColor = System.Drawing.color.Red 

    End Sub

    上記のプログラムであると、”いい”が赤く表示されるはずなのですが、黒いまま表示されてしまいます。

    もしこちらのほうで解決策をご存知でしたら、ご回答よろしくお願いします。

     

    2006年12月13日 0:40
  • ジープさん、こんにちは。

     ジープ さんからの引用
    AxListView を使っているのは、1行に対して列ごとに文字の色を変更したかったからなのですが…。

    そういった事情があったことは、初めて知りました。

    VB.net のListViewで、列ごとに色を変更しようと思ったのですが、なぜかうまくいきませんでした。
    ListView1.Items(0).SubItem(1).ForeColor = System.Drawing.color.Red

    この方法では、行ごとの変更は可能ですが、SubItem ごとに変更することはできないです。

    難しいですが、NM_CUSTOMDRAW を拾って自前で DrawString するしかないような気がします。

    # どうも、.NET Framework 2.0 でも、ForeColor プロパティがある割に意味がないようで...

     

    2006年12月13日 1:07
  • 返答ありがとうございます。

     

    hm…VB 6.0 ではできたのに、VB.net で出来ないのですか…

    あれからAxListViewを調べてみたところ、VB6とVB.netのつなぎなよーな気がしてなりませんでした。

    (資料が少なすぎ感も…)

     

    プロパティは用意されているのに、変更されないって…バグですかね…w

    とりあえず、AxListViewについては、まだサポート権が残っているので、サポートセンターに問い合わせてみることにします。

    何かわかりましたら、追記として残しておいたほうがいいですかね?

     

    何度もご回答ありがとうございました。

    2006年12月13日 1:18
  •  じゃんぬねっと さんからの引用

    ジープさん、こんにちは。

     ジープ さんからの引用
    AxListView を使っているのは、1行に対して列ごとに文字の色を変更したかったからなのですが…。

    そういった事情があったことは、初めて知りました。

    VB.net のListViewで、列ごとに色を変更しようと思ったのですが、なぜかうまくいきませんでした。
    ListView1.Items(0).SubItem(1).ForeColor = System.Drawing.color.Red

    この方法では、行ごとの変更は可能ですが、SubItem ごとに変更することはできないです。

    難しいですが、NM_CUSTOMDRAW を拾って自前で DrawString するしかないような気がします。

    # どうも、.NET Framework 2.0 でも、ForeColor プロパティがある割に意味がないようで...

     

    いえ、1.0 のころから有効ですよ。

    ただ、ListViewSubItem の親となる ListViewItem にサブアイテムごとのスタイルを無効にするプロパティがあって、それがデフォルトでは True になっているってだけです。

    // サブアイテムごとの描画を行うとそれなりに描画パフォーマンスが悪化します。

    2006年12月13日 2:50
  • Hongliang さん、こんにちは。
    いつもお世話になっております。

     Hongliang さんからの引用
    いえ、1.0 のころから有効ですよ。

    なんだってー(AA略

    ただ、ListViewSubItem の親となる ListViewItem にサブアイテムごとのスタイルを無効にするプロパティがあって、それがデフォルトでは True になっているってだけです。

    あ、UseItemStyleForSubItems プロパティですね。
    初めて知りました。(ヲイ)

    ということで、SubItem ごとに変更可能なことを確認しました。

    2006年12月13日 4:30
  • Hongliangさん回答ありがとうございます。

    指摘どおり、ListViewItem の UseItemStyleForSubItems の値をFalseにする分を

    上のソースに追加したら、”いい”が赤字で表示されました。

    今までListViewItemCllectionで見てたのがいけなかったんですね…完全に見落としていました。

    ご指摘ありがとうございます。

     

    パフォーマンスはどのくらい変わってくるのですかね…小規模アプリなので、多少遅くてもかまわないんですが…

    少しテストケースつくって調べてみます。

     

    このスレッドですが、とりあえず当初のItem_Clickが来る件に関しては

    現在マイクロソフトのサポートに問い合わせ中ですので、

    返答がきたときに結果を書いて、締結しようかと思います。

    お二人とも本当にありがとうございました。

    2006年12月13日 4:32
  • MicrosoftにAxListViewのItem_Clickイベントが発生してしまう件について問い合わせたところ、AxListView自体の問題ではなくVB6のListView本体に問題があるとの回答を受けました。

    詳しい原因は現在調査中らしいのですが、

    .netではAxListViewをつかわずに、.netに内包されているListViewクラス使ってくれといわれましたので、

    ListViewクラスに変更しました。

     

    じゃんぬねっとさん Hongliangさん ありがとうございました。

    2006年12月19日 7:37