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

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

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

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

解決済

画面遷移の際に生じる ちらつきをなくしたいです。

aya5kishi
aya5kishi

総合スコア8

C#

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

4回答

0評価

1クリップ

1108閲覧

投稿2022/01/10 01:43

解決したいこと
・下記の画像の通り、メニューバーを作成したのですが画面遷移をする際に、遷移後のFormが開くことによって生じる画面のちらつきをなくしたいです。
イメージ説明
ちらつきをなくしたいのですが、なるべくコードは、基底クラスでメニューバー生成処理を記述して、そのメニューバーを派生クラスで利用する形にしたいです。
自分で試してみたこととして、DoubleBufferedを有効にするためにコンストラクタに、「this.DoubleBuffered = true;」や「SetStyle(ControlStyles.OptimizedDoubleBuffer, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true);」を追加してみたのですが、画面のちらつきはなくなりませんでした。何か良い方法があればご教授いただけると幸いです。

コードは下記の通りとなります。

c#

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp2 { // 基底Formクラス public partial class FormBase : Form { private Label menuberLbl; // メニューバー表示に利用するラベル public static int LBL_CNT = 4; // メニューバーで表示するラベルの数 private Panel menuPnl; // メニューバー生成時にラベルを張り付けるためのパネル public FormBase() { InitializeComponent(); // 全画面表示 this.WindowState = FormWindowState.Maximized; // メニューバー作成処理 // パネル生成処理 menuPnl = new Panel(); menuPnl.Location = new Point(90,50); menuPnl.Size = new Size(240, 30); menuPnl.BackColor = Color.FromArgb(255, 255, 255); this.Controls.Add(menuPnl); // ラベル生成処理 List<Label> lblList = new List<Label>(); for (int i = 0; i < LBL_CNT; i++) { menuberLbl = new Label(); menuberLbl.Name = "lbl" + (i+1); menuberLbl.Font = new Font("MS UI Gothic", float.Parse("9.75"), FontStyle.Bold); menuberLbl.TextAlign = ContentAlignment.MiddleLeft; menuberLbl.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; menuberLbl.AutoSize = false; menuberLbl.Size = new Size(60, 30); menuberLbl.Location = new Point(1+(60 * i), 1); menuberLbl.BackColor = Color.FromArgb(255, 255, 255); menuberLbl.ForeColor = Color.FromArgb(0, 0, 0); menuberLbl.Text = "メニュー" + (i + 1); menuberLbl.Click += new EventHandler(sideLbl_Click); lblList.Add(menuberLbl); } foreach (Label lbl in lblList) { menuPnl.Controls.Add(lbl); menuberLbl.BringToFront(); } } // 画面遷移 private void sideLbl_Click(object sender, EventArgs e) { if (((Label)sender).Name == "lbl1") { Form1 f1 = new Form1(); f1.Show(); this.Visible = false; } else if (((Label)sender).Name == "lbl2") { Form1 f1 = new Form1(); f1.Show(); this.Visible = false; } else if (((Label)sender).Name == "lbl3") { Form1 f1 = new Form1(); f1.Show(); this.Visible = false; } else if (((Label)sender).Name == "lbl4") { Form1 f1 = new Form1(); f1.Show(); this.Visible = false; } } } }

c#

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp2 { public partial class Form1 : FormBase { public Form1() { InitializeComponent(); } } }

お手数をおかけしますがどうぞよろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

KOZ6.0

2022/01/10 05:53

このコードだとラベルをクリックするたびに Form1 がどんどん生成されて、画面を閉じても終了できないんですが、その辺はどう考えてますか?
aya5kishi

2022/01/10 12:59

返信が遅くなってしまい申し訳ございません。 重要なご指摘ありがとうございます。 ご指摘の通り、画面を閉じても終了しない点については考慮が欠けていました。 自分でも調べてみて下記のように画面遷移のコードを変更してみました。 下記のコードで考慮が足りない場合は、ご指摘いただけると幸いです。 if (((Label)sender).Name == "lbl1") { Form1 f1 = new Form1(); f1.Owner = this; f1.Show(); this.Hide(); f1.Owner.Show(); f1.Close(); }
KOZ6.0

2022/01/10 13:47

それだと f1 のインスタンスを立ち上げて、一瞬表示した後閉じてるので意味がありません。
aya5kishi

2022/01/10 15:06

Runメソッドの引数を変更するようにコードを修正してみようと思います。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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