問題タブ [toolstrip]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - フォーカスされていないToolStripItemにツールチップを表示する
ToolStripItemsは、それらの上にマウスを置くと、フォーカスされていないフォームであっても、アクティブな強調表示を表示します。ただし、フォームにフォーカスがない限り、ツールチップは表示されません。ToolStripの「クリックスルー」ハックを見たことがあります。親フォームにフォーカスがないときにToolStripButtonにツールチップを表示させる方法を知っている人はいますか?
ありがとう!
winforms - アプリケーションで使用するために、どのナビゲーション コントロールを選択しますか?
ToolStrip と MenuStrip または RibbonBar?
両方のコントロールを組み合わせたものです。また、TabPages ナビゲーション、コンテキスト タブなどもあります。ただし、RibbonBar は非常に複雑なコントロールであり、たとえば Word2007 で新しいドキュメントを開くと、画面の半分にリボン バーが表示されます。かっこよくない。toolStrips がある場合、それらを上、下、左、右にレイアウトして、UI の外観をより詳細に制御できます。見たくないツールストリップを非表示にすることもでき、画面スペースを取りません。
c# - System.Windows.Forms.ToolStrip の高さまたは自動サイズ調整
Excel 2007 アクション ペインで一連の ToolStrips を使用しています。プログラムで各 ToolStrip にボタンを追加してから、各 ToolStrip を操作ウィンドウに追加しています。ここまでは順調ですね; 私の ToolStrips が、関連付けられた ToolStripButtons と共に表示されます。
この問題は、ToolStrip の内容全体を表示する際に発生します。ToolStrip.AutoSize を true に設定しています (実際にはこれがデフォルトです)。そのプロパティの説明は次のとおりです。
「コンテンツ全体を表示するためにコントロールのサイズを自動的に変更するかどうかを示す値を取得または設定します。」
問題は、true に設定されている場合でも、ToolStrips はアクション ペインの幅を表示しますが、高さは 1 行しかないことです。より多くのボタンを含む ToolStrips の場合、そのスペースに表示できます。ToolStrip は、ボタンのセット全体を表示するために垂直方向に拡張されませんが、代わりに右側にドロップダウン矢印が表示され、ユーザーは残りのボタンを表示できます。ボタン。
私の質問は、このプロパティ (または実際には、このコンポーネント) の使用法を誤解しているのでしょうか? たとえば、AutoSize は水平方向のスペースのみに関連していますか? どんなに価値があるとしても、高さの値を無駄に設定しようとしました。
c# - ToolStrip が別の ToolStripContainer にドッキングされないようにするにはどうすればよいですか?
さまざまな種類の子ウィンドウを開くことができる MDI アプリケーションがあります。同じ種類の子ウィンドウの複数の (ただし異なる) インスタンスを開くことができます。(例: 子ウィンドウ タイプ A の 3 つのインスタンスと子ウィンドウ タイプ B の 2 つのインスタンスを開くことができます。5 つのウィンドウはすべて別個のエンティティであり、ユーザーが同じデータを明示的に複数のウィンドウにドラッグしない限り、データを共有しません。) 各子ウィンドウ1 つ以上の ToolStrips を持つ ToolStripContainer があります。どうすれば防ぐことができますか:
- ユーザーがタイプ A の子ウィンドウからタイプ B の子ウィンドウの ToolStripContainer に ToolStrip をドラッグすることから?
- ユーザーは、子ウィンドウ A の 1 つのインスタンスから同じタイプのウィンドウの別のインスタンスの ToolStripContainer に ToolStrip をドラッグすることはできませんか?
ユーザーがタイプ A のインスタンス 1 からタイプ A のインスタンス 2 に ToolStrip をドラッグし、インスタンス 2 でいくつかのものを選択してから、ツールバーのボタンをクリックして、他のウィンドウに奇妙なことが起こるのを防ごうとしています。 . 同様に、タイプ A のウィンドウからタイプ B のウィンドウに ToolStrip をドラッグするのは意味がありません。アクションはそのタイプには適用されませんが、ユーザーにはすべて問題ないように見えます。ドラッグ。
ControlAdded イベントに独自のハンドラーを追加するのと同じくらい簡単ですか、それとももっと良い方法がありますか? .NET 3.0 で WinForms を使用しています。
編集:再現手順
- 新しい Windows アプリケーション プロジェクトを作成します。
- 新しいユーザー コントロールを追加します。1 つのボタンを持つ 1 つの ToolStrip を含む ToolStripContainer をコントロールに与えます。
- 手順 2 を繰り返して、UserControl2 クラスを作成します。
- ソリューションをコンパイルして、UserControl1 と UserControl2 がツールボックスに表示されるようにします。
- UserControl1 と UserControl2 をフォームにドラッグします。境界線がどこにあるかがわかるように境界線を設定します。
- アプリを実行します。
- ToolStrip を UserControl1 のコンテナーからドラッグして、UserControl2 のコンテナーにドロップできるようになりました (UC1 にゼロの ToolStrips と UC2 に 2 つの ToolStrips を残します)。
- ここで、UserControl1 のコードにしかアクセスできないとします。ユーザーが ToolStripContainer のインスタンスから ToolStrip をドラッグできないようにするにはどうすればよいですか?
user-interface - ToolStrip を既存の ToolStrip と並べて ToolStripPanel に追加しようとしています
Visual Studio 2005 で .net 2.0 を使用しています。フォームの上部に 2 つの異なるツールストリップを追加して、並べて表示しようとしています。Word 2003 のようにして、複数のツールストリップを同じ行に追加し、各ツールストリップに行を割り当てるのではなく、それらを並べて表示できるようにしたいと考えています。
そこで、ToolStripPanel を追加して、フォームの上部にドッキングしました (余分なパネルはすべて必要ないため、ToolStripContainer は使用しませんでした。上部に 1 つだけ必要です)。両方のツールストリップを追加し、それらの Stretch プロパティを False に設定しました。これらをデザイナー ウィンドウに並べて表示することはできますが、実行時に ToolStripPanel はツールストリップを分離し、各ツールストリップに専用の行を提供します。怪我に侮辱を加えるかのように、デバッグを停止してデザイナーに戻ると、デザイナーがツールストリップを独自の行にも移動していることに気付きます! ここで何か間違ったことをしていますか?
私は一日中グーグルをしており、ToolStripPanelRow オブジェクトに関する情報をいくつか見つけましたが、ツールストリップを追加する簡単な方法がわかりません (つまり、ToolStripPanelRow.Controls.Add メソッドなどはありません)。コントロール オブジェクトの配列を返す Controls() プロパティがあり、その配列にアイテムを追加しようとしてもうまくいきませんでした。また、ToolStripPanel.Join メソッドに関するドキュメントもいくつか見つけました。私が何をしたり、どのオプションを試したりしても、常に新しいツールストリップがパネルの上部の独自の行に追加され、他のすべてが押し下げられます。
完全な開示のために、ToolStripPanel とツールストリップの 1 つが基本クラス フォームに追加されており、基本クラス フォームから継承するサブクラス フォームに他のツールストリップを追加しようとしていることを警告しておきます。基本クラス フォームの ToolStripPanel と ToolStrip は両方とも「Protected Friend」として宣言されているため、これは機能するはずです。前述したように、サブクラス フォームのデザイナ ウィンドウを使用すると、(少なくとも、しばらくの間は) それを行うことができます。
誰かが私がこれを機能させるのを手伝ってくれるか、少なくともなぜそうでないのかを明らかにすることができれば、私は非常に感謝しています.
.net - ポップアップメニュー付きのToolStripButton?
ユーザーが ToolStrip から描画ツールを選択できる、ペイントのようなプログラムの GUI を作成しています。これらのツールの一部にはバリエーションがあり、ユーザーがポップアップ メニューからいずれかを選択できるようにしたいと考えています。
Photoshop のツールバー インターフェースに詳しい人なら、私が何を求めているかわかるでしょう。ユーザーは、ボタンをクリックして選択したツールで作業を開始するか、クリック時に表示されるポップアップ メニューからツールの 1 つを選択し、その時点からボタンはそのツールを表します。また、そのツール ファミリが選択されると、ボタンの Checked プロパティが True に設定されます。
これは SplitButton または DropDownButton で実現できると思いましたが、これらには現在選択されているツールをユーザーが確認できる Checked プロパティがありません。そこで、クリックすると表示される ToolStripButton と ContextMenuStrip を使用しました。
問題は、カーソル位置を取得して ContextMenuStrip を表示しているため、ToolStripButton のどの部分がクリックされたかによっては、ポップアップ メニューが部分的にそれを覆う可能性があり、非常に洗練されていない外観になることです。ToolStripButton の画面座標を取得するにはどうすればよいですか? または、これを行うためのより良い(そしてまだ比較的単純な)方法はありますか?
.net - 動的に追加された ToolStripItems の ToolStripPanel オーバーフロー動作を変更する
新しい ToolStrips を動的に追加する Windows フォーム ToolStripPanel があります。各 ToolStrip には、動的に追加する ToolStripItems (主に ToolStripButtons) があります。
各 ToolStrip にすべての ToolStripItem が表示される限り、すべての ToolStrip を 1 行に収めたいと思います。新しい ToolStripItem を ToolStrip に追加するとオーバーフローが発生する場合、行の最後にある ToolStrip を新しい行にジャンプさせたいと思います。オーバーフロー ボタンを表示したいのは、ToolStrip に項目が多すぎてフォームの幅に収まらない場合だけです。
ユーザーが手動で ToolStrip を移動しない限り、これをデフォルトの動作にしたいと考えています。ユーザーが ToolStrip を移動した場合、既存のオーバーフロー (ドロップダウンの選択肢があるオーバーフロー ボタンなど) の動作が発生するようにします。ツールバーを自分で配置すれば、ユーザーはこのデフォルトの Winforms オーバーフロー動作で問題ないと思います。
ユーザーが物を再配置した後に新しい動的ツールバーが追加された場合、新しいツールバーを一番下の行の最後の ToolStrip の右側に追加したいと思います。このツールバーは、ユーザーが手動で再配置するまで、更新されたオーバーフロー動作 (収まらない場合は新しい行を使用するなど) を持つ必要があります。
私は大きな成功を収めずにいくつかの研究を行いました:
- これは、 ToolStripLayoutStyleを変更するだけの簡単な問題のようですが、そうではないようです。(せいぜい、特定の行のすべての ToolStrips にオーバーフロー ボタンが表示されている場合に、新しい行が作成されます)。
- MSDN の記事「方法: Windows フォームで ToolStrip オーバーフローを管理する」は、オーバーフロー ボタンが発生した場合のみをカバーしているようです。
- ToolStrip にはLayoutCompletedイベントがあり、微調整に使用できると思われますが、もっと簡単な方法があるはずです。
- カスタム LayoutEngine を作成することは、組み込みの LayoutEngine が私がやりたいことに非常に近いため、やり過ぎのように思えます。
簡単な解決策がありませんか?
更新:まだ良い解決策を探しています。LayoutCompleted ルートが可能のようです。ただし、問題は、複数回呼び出されることです。ToolStripItem がオーバーフロー エリアにあり、その直後にメイン エリアにあると表示されることがあるため、オーバーフローにあるかどうかを 1 回だけ確認するのは安全ではないようです。
c# - 既存の ToolStripRenderer を使用して、ホストされている NumericUpDown をペイントするにはどうすればよいですか?
をホストし、のプロパティを公開するコントロールがNumericUpDown
ありますToolStripControlHost
。NumericUpDown
機能的には問題ToolStrip
ありませんが、 に配置すると、視覚的に他ToolStripItem
の と一致しません。
ToolStrip
既存のを使用して、コントロールにもある es とToolStripRenderer
同様の方法でコントロールを描画したいと思います。コントロールを使用する他のユーザーが、選択したレンダラーで使用できるようにしたいので、それを行うToolStripComboBox
ためのカスタムを作成することに興味はありません。ToolStripRenderer
ホスティング コントロール クラスとホストされたコントロール クラスでオーバーライドを試みOnPaint
、レンダラーの描画メソッドを使用してみましたが、達成できるのは端の周りに未塗装の領域を持つことだけです。OnPaintBackground
スピン ボタンは引き続きシステム テーマで描画されます。
NumericUpDown
既存の を使用してホストされた をペイントするにはどうすればよいToolStripRenderer
ですか?