
実現したいこと
.net 4.8のWindowsフォーム.NETでメガメニューのようなドロップダウンリストを作成したいです。
たとえば、https://www.toray.co.jp/などのメニューの様に、多くの選択から画面遷移なしで行いたいと考えております。
また、他によい案がございましたら、試してみたいのでお知恵を拝借できないでしょうか?
試したこと
C1DropDownControlなど、有料の物であれば可能の様に思えますが、購入にはハードルが高い状況となっています。
wpfで実現できそうですが、すでにあるWindowsフォームのアプリに組み込みたいので、できればWindowsフォームで行いたい
です。
補足情報(FW/ツールのバージョンなど)
Windows10 64bit
.NET Framework 4.8
visual studio 2022 comminity edition
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。


退会済みユーザー
2022/07/23 00:29

回答2件
1
ベストアンサー
Penalをアニメーションしてドロップダウンに見せるというサンプルがありますねー。
これなら実装の自由度があがりそうですね。参考になれば幸いです。
https://www.youtube.com/watch?v=CQBl1l27dL0
https://github.com/SaLaaRHuSyN/DropDownPanel
投稿2022/07/23 01:02
総合スコア851
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答へのコメント

0
こういうのを「メガメニュー」って言うんですね。知りませんでした^^;
TabControl
の高さを「タブヘッダーだけ見えている状態」・「すべて見えている状態」と、うまく切り替えてそれっぽく見せれませんかね?
cs
1using System; 2using System.Drawing; 3using System.Windows.Forms; 4 5namespace Qovdh1vw2d6ktde 6{ 7 public partial class Form1 : Form 8 { 9 private TabControl tabControl1; 10 private Button button1; 11 12 public Form1() 13 { 14 InitializeComponent(); 15 16 MouseDown += (s, e) => button1.Focus(); 17 Load += (s, e) => ActiveControl = button1; 18 19 tabControl1 = new TabControl 20 { 21 Dock = DockStyle.Top, 22 Size = new Size(500, 20), 23 Parent = this, 24 }; 25 var page1 = new TabPage("企業情報"); 26 tabControl1.Controls.Add(page1); 27 tabControl1.Controls.Add(new TabPage("製品・サービス")); 28 tabControl1.Controls.Add(new TabPage("採用情報")); 29 tabControl1.Enter += tabControl1_Enter; 30 tabControl1.Leave += tabControl1_Leave; 31 tabControl1.SelectedIndexChanged += tabControl1_SelectedIndexChanged; 32 33 var leftTabControl1 = new LeftTabControl 34 { 35 Alignment = TabAlignment.Left, 36 Dock = DockStyle.Fill, 37 DrawMode = TabDrawMode.OwnerDrawFixed, 38 ItemSize = new Size(25, 100), 39 Multiline = true, 40 Parent = page1, 41 SizeMode = TabSizeMode.Fixed, 42 }; 43 leftTabControl1.Controls.Add(new TabPage("ごあいさつ")); 44 leftTabControl1.Controls.Add(new TabPage("会社案内")); 45 leftTabControl1.Controls.Add(new TabPage("経営方針")); 46 47 button1 = new Button 48 { 49 Location = new Point(81, 88), 50 Size = new Size(260, 200), 51 Parent = this, 52 Text = "button1", 53 }; 54 } 55 56 private void tabControl1_Enter(object sender, EventArgs e) 57 { 58 var i = tabControl1.SelectedIndex; 59 tabControl1.SelectedIndex = -1; 60 tabControl1.SelectedIndex = i; 61 } 62 private void tabControl1_Leave(object sender, EventArgs e) 63 { 64 tabControl1.SelectedIndex = -1; 65 } 66 private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) 67 { 68 tabControl1.Size = tabControl1.SelectedIndex == -1 ? new Size(500, 20) : new Size(500, 150); 69 } 70 } 71 72 // [方法: TabControl を使用して側面に位置を合わせて表示する - Windows Forms .NET Framework | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/how-to-display-side-aligned-tabs-with-tabcontrol) 73 public class LeftTabControl : TabControl 74 { 75 public LeftTabControl() 76 { 77 Alignment = TabAlignment.Left; 78 DrawMode = TabDrawMode.OwnerDrawFixed; 79 ItemSize = new Size(25, 100); 80 SizeMode = TabSizeMode.Fixed; 81 } 82 83 protected override void OnDrawItem(DrawItemEventArgs e) 84 { 85 base.OnDrawItem(e); 86 87 var b = e.State == DrawItemState.Selected ? Brushes.White : SystemBrushes.Control; 88 e.Graphics.FillRectangle(b, e.Bounds); 89 90 var text = TabPages[e.Index].Text; 91 var bounds = GetTabRect(e.Index); 92 var format = new StringFormat 93 { 94 Alignment = StringAlignment.Near, 95 LineAlignment = StringAlignment.Center, 96 }; 97 98 e.Graphics.DrawString(text, e.Font, Brushes.Black, bounds, format); 99 } 100 } 101}
wpfで実現できそうですが、すでにあるWindowsフォームのアプリに組み込みたいので、できればWindowsフォームで行いたいです。
WPFでできる目途が立っているならば(わたしは立ってませんw)、フォームにWPFコントロールを埋め込むことも可能です。
Windows フォームで WPF 複合コントロールをホストする | Microsoft Docs
空域問題がありますが、このようなオーバーレイするものなら問題にならないでしょう。
投稿2022/07/23 06:54
総合スコア8868
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答へのコメント

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
同じタグがついた質問を見る
C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。
Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。
.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。