none
ListViewの列幅を変更できないようにしたいのですが… RRS feed

  • 質問

  • 表示中のListViewの列幅を、ユーザーに変更されないようにしたいと考えています。

    方法としては、「Windowsからのマウス操作のメッセージを潰してしまえばよい」と

    いうところまでは理解できたのですが、WndProcメソッドの使い方が良く分かりませ

    ん。C言語で書かれたサンプルを以下のページに見つけたのですが、情けないこと

    にC言語の知識がなくて理解できない状況です。どなたか”翻訳”して解説願えない

    でしょうか。

     

    http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-38925.htm

     

     

    2008年5月20日 14:25

回答

  •  斎藤 晃 さんからの引用

    「Windowsからのマウス操作のメッセージを潰してしまえばよい」というところまでは理解できた

    示されているURLで採用している方法は、「メッセージをつぶす」ものではありません。

    その辺は大丈夫ですか?

     

     斎藤 晃 さんからの引用

    C言語で書かれたサンプルを以下のページに見つけたのですが、情けないこと

    にC言語の知識がなくて理解できない状況です。どなたか”翻訳”して解説願えない

    でしょうか。

    提示されたURLにはC言語の記述はありません。

     

    開発環境はVS2003 + C#です。

    CとC++とC#は似ていても異なる言語であることを意識しましょう。

     

     

    また、C#のコードはVB.NETに容易に変換できます。

    http://dobon.net/vb/dotnet/links/convertcs2vb.html#cstovb

    2008年5月20日 14:42
    モデレータ
  • 確認し損ねましたが、VB.NETで問題なかったんでしょうか?

    2008年5月20日 14:46
    モデレータ
  • .NET 2.0 (VB2005) 以降なら ListView.ColumnWidthChanging で簡単実装ですけどねー。
    2008年5月20日 16:49
  • 以下のようにすると動かなくなるようです。

     

    Code Snippet

    e.NewWidth = Me.ListView1.Columns(e.ColumnIndex).Width

    e.Cancel = True

     

     

     

    2008年5月21日 9:00

すべての返信

  •  斎藤 晃 さんからの引用

    「Windowsからのマウス操作のメッセージを潰してしまえばよい」というところまでは理解できた

    示されているURLで採用している方法は、「メッセージをつぶす」ものではありません。

    その辺は大丈夫ですか?

     

     斎藤 晃 さんからの引用

    C言語で書かれたサンプルを以下のページに見つけたのですが、情けないこと

    にC言語の知識がなくて理解できない状況です。どなたか”翻訳”して解説願えない

    でしょうか。

    提示されたURLにはC言語の記述はありません。

     

    開発環境はVS2003 + C#です。

    CとC++とC#は似ていても異なる言語であることを意識しましょう。

     

     

    また、C#のコードはVB.NETに容易に変換できます。

    http://dobon.net/vb/dotnet/links/convertcs2vb.html#cstovb

    2008年5月20日 14:42
    モデレータ
  • 確認し損ねましたが、VB.NETで問題なかったんでしょうか?

    2008年5月20日 14:46
    モデレータ
  • .NET 2.0 (VB2005) 以降なら ListView.ColumnWidthChanging で簡単実装ですけどねー。
    2008年5月20日 16:49
  • Azuleanさん、Hongliangさん返信ありがとうございました。

    ColumnWidthChangingという機能があるとは全く知りませんでした。

    VB2008を使用していますのでさっそく試してみます。

     

    >示されているURLで採用している方法は、「メッセージをつぶす」ものではありません。

    SetWindowLong関数を使った別の方法と混同してしていました。

     

    >CとC++とC#は似ていても異なる言語であることを意識しましょう。

    >また、C#のコードはVB.NETに容易に変換できます。

    "C"と付くものは全て親類で、違いは些細なものだとばかり思い込んでおりました。

    また、変換ツールの存在も勉強になりました。

     

    2008年5月21日 0:33
  • ColumnWidthChanging のイベント処理を追加し、MSDNライブラリにあったサンプルを真似て

    "e.Cancel" を実行させているのですが、 列幅は変更されてしまいます。"e.Cancel" によって

    「列幅を変えようとする操作を無視してくれる」という解釈が間違っているのでしょうか。

    2008年5月21日 8:15
  • 教えて頂いたツールで、C#のコードをVB.NETに変換してみました。(便利ですね)

     

    >示されているURLで採用している方法は、「メッセージをつぶす」ものではありません。

     

    理解できました。1列目の幅を"0"に固定しているのですね。

    2008年5月21日 8:26
  • 訂正です。

    「"e.Cancel" を実行させている」という表現はおかしいですね。

    正確には

    「"e.Cancel = True" に設定している」です。

    2008年5月21日 8:52
  • 以下のようにすると動かなくなるようです。

     

    Code Snippet

    e.NewWidth = Me.ListView1.Columns(e.ColumnIndex).Width

    e.Cancel = True

     

     

     

    2008年5月21日 9:00
  • はなはなはなさん、返信ありがとうございました。

    教えて頂いたラインを追加して、列幅が固定されるようになりました。

     

    2008年5月21日 9:50