C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C#のvisibleが変更できないことについて

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■85835 / inTopicNo.1)  C#のvisibleが変更できないことについて
  
□投稿者/ ぽむ (1回)-(2017/11/28(Tue) 21:26:51)

分類:[C#] 

フォーム画面でpanel1をtrue、panel2をfalseにした状態でボタンを押すことで見えるパネルを切り替えたいのですが、全く動きません(エラーはでずに実行できるが切り替わらない)
なにか些細な事でもいいので助言が欲しいです

private void button40_Click_1(object sender, EventArgs e)
{
panel1.Visible = false;
panel2.Visible =true;


}
引用返信 編集キー/
■85836 / inTopicNo.2)  Re[1]: C#のvisibleが変更できないことについて
□投稿者/ WebSurfer (1370回)-(2017/11/28(Tue) 21:40:57)
No85835 (ぽむ さん) に返信

何を作っているのか(Windows Forms?, ASP.NET Web Forms? WPF? その他?)と開発環境(OS, .NET,
Visual Studio のバージョンなど)を書いてください。
引用返信 編集キー/
■85838 / inTopicNo.3)  Re[2]: C#のvisibleが変更できないことについて
□投稿者/ ぽむ (2回)-(2017/11/28(Tue) 21:49:42)
No85836 (WebSurfer さん) に返信
Windows Formsで開発環境はWindows7のVisual Studio2017を使用しています。初心者のため他に必要な情報等あればご指摘お願いします。
引用返信 編集キー/
■85839 / inTopicNo.4)  Re[1]: C#のvisibleが変更できないことについて
□投稿者/ Azulean (908回)-(2017/11/28(Tue) 22:00:03)
No85835 (ぽむ さん) に返信
> フォーム画面でpanel1をtrue、panel2をfalseにした状態でボタンを押すことで見えるパネルを切り替えたいのですが、全く動きません(エラーはでずに実行できるが切り替わらない)

本当に何も起きないのですか?
期待する動きではないが、何か違う動きをするということはないですか?

試しに、panel1 と panel2 の位置を大きくずらしたとき(重ならないようにしたとき)にも変化はなさそうですか?
引用返信 編集キー/
■85840 / inTopicNo.5)  Re[2]: C#のvisibleが変更できないことについて
□投稿者/ ぽむ (4回)-(2017/11/28(Tue) 22:03:00)
No85836 (WebSurfer さん) に返信
> なにも変化が見られずpanel1が出たまま、panel2は見えないままです。
引用返信 編集キー/
■85841 / inTopicNo.6)  Re[3]: C#のvisibleが変更できないことについて
□投稿者/ WebSurfer (1372回)-(2017/11/28(Tue) 22:31:58)
No85840 (ぽむ さん) に返信

Windows Forms は詳しくないのでお役に立てないと思います・・・が、聞いておいて何も答えない
というのもなんですので、とりあえず簡単なサンプルを作って試してみましたが、期待通り切り替
えることはできました。(質問者さんの問題は再現できませんでした)

検証に使ったコードは以下の通りです。デザイナで Form に Panel を 2 つドラッグ&ドロップ、それ
ぞれに Button と Label を配置、panel2 の Visible プロパティの初期値を false に設定、Panel 
の外に Button を配置しその Click イベントのハンドラで以下のように切り替えています。

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 WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (panel1.Visible)
            {
                panel1.Visible = false;
                panel2.Visible = true;
            }
            else
            {
                panel1.Visible = true;
                panel2.Visible = false;
            }
        }
    }
}

ググって調べただけですが、 Panel が入れ子になっていると期待通り切り替わらないという記事が
いくつか見つかります。そういうことはないですか?

windows forms panel visible などをキーワードにググると参考になる記事が見つかるかもしれま
せんのでご自分でもググってみてください。

引用返信 編集キー/
■85842 / inTopicNo.7)  Re[2]: C#のvisibleが変更できないことについて
□投稿者/ 山アパン (1回)-(2017/11/28(Tue) 22:33:55)
単に、button40_Click_1がボタンクリックイベントのイベントハンドラとして追加されていないだけでは?
引用返信 編集キー/
■85843 / inTopicNo.8)  Re[2]: C#のvisibleが変更できないことについて
□投稿者/ PANG2 (201回)-(2017/11/28(Tue) 22:36:34)
2017/11/28(Tue) 22:37:20 編集(投稿者)

No85839 (Azulean さん) に返信
> ■No85835 (ぽむ さん) に返信
>>フォーム画面でpanel1をtrue、panel2をfalseにした状態でボタンを押すことで見えるパネルを切り替えたいのですが、全く動きません(エラーはでずに実行できるが切り替わらない)
>
> 本当に何も起きないのですか?

button40をクリックしたとき、button40_Click_1が走らないとか。
デバッグ実行で、button40_Click_1にブレークポイントを置けば分かります。

> 期待する動きではないが、何か違う動きをするということはないですか?
親コンテナが.Visible = falseであれば、自身を.Visible = true にしても表示されません。

いずれにせよ、.designer.cs を見れば原因は分かるはずです。

引用返信 編集キー/
■85844 / inTopicNo.9)  Re[3]: C#のvisibleが変更できないことについて
□投稿者/ WebSurfer (1373回)-(2017/11/28(Tue) 22:38:19)
No85840 (ぽむ さん) に返信

> private void button40_Click_1(object sender, EventArgs e)

Button が 40 個もあるようですが、関係ない Button をクリックしてるということはありませんか?

私が作ったサンプルのように必要最低限の簡単なものを作って試してください。
引用返信 編集キー/
■85848 / inTopicNo.10)  Re[3]: C#のvisibleが変更できないことについて
□投稿者/ ぽむ (5回)-(2017/11/29(Wed) 01:25:22)
色々試してみた結果
panel1がfalseになり非表示になることは成功したのですが、やはりpanel2のvisibleの値がtrueになりませんでした...
引用返信 編集キー/
■85850 / inTopicNo.11)  Re[4]: C#のvisibleが変更できないことについて
□投稿者/ Azulean (909回)-(2017/11/29(Wed) 06:30:01)
No85848 (ぽむ さん) に返信
> panel1がfalseになり非表示になることは成功したのですが、やはりpanel2のvisibleの値がtrueになりませんでした...

先にも書きましたが、もう一度。

試しに、panel1 と panel2 の位置を大きくずらしたとき(重ならないようにしたとき)にも、panel2 は表示されない感じですか?
重なっている= panel2 が panel1 の子 になっていないかを気にしています。
引用返信 編集キー/
■85856 / inTopicNo.12)  Re[4]: C#のvisibleが変更できないことについて
□投稿者/ みい (74回)-(2017/11/29(Wed) 10:27:43)
No85848 (ぽむ さん) に返信

「panel2」で検索をかけてみてください。
該当画面のDesigner.cssに「this.panel1.Controls.Add(this.panel2)」があれば
皆様が言われているようにpanel2がpanel1の子になっています。

もしそうなっていたらDesigner.css上で
this.panel1.Controls.Add(this.panel2)をthis.Controls.Add(this.panel2)
に変更、panel2のLocationはpanel1基準になっていますのでpanel1のLocation
を足し合わせた値に変更してみてください。
※panel1がFormの子である前提で書いています。
 panel等の上にある場合はそのコントロールに対してAddしてください。
引用返信 編集キー/
■85861 / inTopicNo.13)  Re[5]: C#のvisibleが変更できないことについて
□投稿者/ ぽむ (6回)-(2017/11/29(Wed) 19:20:23)
完全にパネルをずらして確認してみたところ、panel2が出現しました。(つまり皆様がおっしゃっていたとおり子になっていた)
助言の通りdesigner.cssを変更して見ると、重なっている状態でもvisibleの変更ができるようになりました。
とても勉強になりました。
皆様ありがとうございました。
引用返信 編集キー/
■85873 / inTopicNo.14)  Re[5]: C#のvisibleが変更できないことについて
□投稿者/ Azulean (910回)-(2017/11/30(Thu) 07:06:30)
No85856 (みい さん) に返信
> もしそうなっていたらDesigner.css上で
> this.panel1.Controls.Add(this.panel2)をthis.Controls.Add(this.panel2)
> に変更、panel2のLocationはpanel1基準になっていますのでpanel1のLocation
> を足し合わせた値に変更してみてください。

Designer.cs は自動生成用なので、手修正はダメです。
本筋としては「ドキュメントアウトライン」を使うことをお勧めしておきます。
http://www.atmarkit.co.jp/fdotnet/dotnettips/612docoutline/docoutline.html

このウィンドウ(ツリー)上でドラッグするなどすれば、親子関係を解消できます。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ