質問者
toolstripのcomboboxのリサイズについて

質問
-
はじめまして。koma31と申します。
toolstripに配置したcomboboxのリサイズについてです。
現在、フォームのtoolstrip上にIEのアドレス入力欄のような形でcomboboxを配置しています。
フォームの大きさを変えた場合に、comboboxの横幅も変えたいので、toolstripのリサイズイベントで以下のような処理をしています。
private void toolStrip1_Resize(object sender, EventArgs e)
{
ComboBox.Width = toolStrip1.Width - 200;
}これで、うまく動作すると期待していたのですが、フォームの最大化ボタンを押してから、フォームの元に戻す(縮小)ボタンを押すと、comboboxが描画されずにこまっています。その他のフォームの大きさ変更では、すべて思ったようにcomboboxの大きさが変更されて描画されます。
このときの画面上の表示は、combboxがフォームの大きさを超えているかのように、下向きの▼印のようなボタンが表示され、それをクリックすると、フォーム内に収まる形式で描画されます。またcomboboxのwidthはフォームサイズ内に収まる数値になっていることを確認しています。
最大化ボタンで、comboboxの大きさを元のフォームの横幅を超えた値になったあと、元に戻すとこのような現象が起こるようです。
どのようにしたら、フォームの最大化ボタン→元に戻すボタンで、いったん元のフォームの横幅を超えたcombboxを正しく表示できるようになるでしょうか?
プログラム技術は未熟ですが、ネットで調べて、wndprocをオーバライドしたり、いろいろやってみましたが、自力ではどうにもならないところまで来ました。
皆様のお知恵をお聞かせいただきたくお願いいたします。
すべての返信
-
たぶん、配置というのが座標を調整しているかControls.Addしているんじゃないかと思うんですが
ToolStripControlHostを使ってみてはどうでしょうか?
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.toolstripcontrolhost.aspx
不要な小細工が減るはずです。 -
ご回答ありがとうございます。私の書き方が悪かったのですが、配置という表現が適切でありませんでした。
ToolStripComboBoxクラスを利用しています。ですから、何も小細工はしないで、ツールバーにコンボボックスを表示する事はできました。ただし、フォームをリサイズしたときに、他のコントロールにあるようなアンカーがないので、toolstripのリサイズイベントでcomboboxの幅を変更するようにプログラムしました。それは前回紹介したような簡単なものです。
マウスでフォームの枠をクリックしてフォームの大きさを変更するときは、うまくいくのですが、最大化ボタンクリック、元に戻す(縮小)ボタンクリックしたときだけ、コンボボックスが表示されなくなります。
元に戻す(縮小)ボタンを押したときは、リサイズイベントが発生しないのかと疑ってデバッガで調べてみたのですが、クリックした後リサイズイベントは呼び出されていました。
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.toolstripcombobox.aspx
にある説明には、
ToolStrip で適切にレンダリングされる ToolStripComboBox を表します。
とあるのですが、どうやってもフォームの最大化、元に戻すでcomboboxの横幅を変更した場合に限り、正常に表示されずに困っております。
良い解決方法があればご助言をお願いいたします。
-