質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

694閲覧

.net 4.8のWindowsフォーム.NETでメガメニューのようなドロップダウンリストを作成したい

tamago83

総合スコア60

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

1クリップ

投稿2022/07/23 00:00

編集2022/07/23 01:01

実現したいこと

.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:24

リンクをクリックしても飛べません (404 Not Found)。直してください。
退会済みユーザー

退会済みユーザー

2022/07/23 00:29

windows forms drop down menu などでググるといろいろヒットしますが、そういうことは調べたうえで質問してますか?
tamago83

2022/07/23 01:06

リンク修正させていただきました。 併せて、上記キーワードでも検索させていただきましたが、うまく見つける事ができず、複数列にはできるけど、選択すると行単位の扱いのものしか見つけられませんでした。
guest

回答2

0

ベストアンサー

Penalをアニメーションしてドロップダウンに見せるというサンプルがありますねー。
これなら実装の自由度があがりそうですね。参考になれば幸いです。
https://www.youtube.com/watch?v=CQBl1l27dL0
https://github.com/SaLaaRHuSyN/DropDownPanel

投稿2022/07/23 01:02

umed0025

総合スコア851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamago83

2022/07/27 21:05

確かに、ドロップダウンリストにこだわらなくても同様のことが可能ですね。 formのサイズが小さくなった時に問題は出るのですが、textboxをクリックすると、‎textboxのすぐ下にTableLayoutPanelを表示(visble=false->visible=true)にするやり方で対応しました。
guest

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

TN8001

総合スコア9321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamago83

2022/07/27 21:06

ありがとうございます。いろいろやり方があるんですね。勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問