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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

4405閲覧

c# splitcontainer のpanel2に文字等を表示するにはどうしたら

Daidaya

総合スコア8

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

1グッド

0クリップ

投稿2017/08/28 06:39

編集2017/09/02 08:04

###前提・実現したいこと

現在、c#においてsplitcontainerの panel1のテキストに入れた大きさ(x,y)に従って、設置されたbuttonを押す事で panel2の場所に□を使って大きな四角形を作る。
というアプリ? を作ろうとしています。

プログラムは少し学んだくらいで、visual studio のフォームアプリケーションというのが便利そうなので使ってみた次第なのですが、panel2の位置に自分で書いたプログラムによって描かれる上記四角形を表示したいのですが、どこに書けばいいのでしょうか?

ツールボックスでそういうのがあるのかな。と見てみたのですが見当たらないし、ダブルクリックで出てくるのはイベントハンドラらしいので違いますよね?

しばらく調べたのですが、さっぱり分からなかったので、どなたかお助けください。よろしくお願いします。

追記:
やりたいことは、
テキストボックスで x,y を読み込む

for文を使い配列[x,y]に□を埋め込んでいく

OnPaintを使ってsplitcontainer1に上記配列で作られた大きな四角形を表示するという事です。

紛らわしく申し訳ありません。

何かひどく難しいことのような気がしてきましたので、二日後くらいにこの質問は打ち切らせていただきます。(9/02)

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

ko-he-👍を押しています

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

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

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

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

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

guest

回答2

0

ところどころ通じないのですが、イメージとしてはこんな感じ?

  • SplitContainerコントロールによりPanel1とPanel2を分割
  • Panel1にX,Yを意味するTextBoxを配置
  • Panel1にButtonを配置
  • Button押下でPanel2に「大きな四角形」を描写

でいくつか確認です。

  • XとYは何を意味しますか?

座標??
サイズ???

  • 描写したい要素はなんですか?

「大きな四角形」だけで言えば、例えば背景色を付けたPanelやリサイズした画像などを配置できます。
「□」がテキストを意味するんであれば、意図を確認しないことには意味不明です。

とりあえずX,Yをサイズ、描写する要素をPanelだと仮定してすると、こんな感じですかね。

C#

1 private void button1_Click(object sender, EventArgs e) 2 { 3 var width = this.textBox1.Text; 4 var height = this.textBox2.Text; 5 6 var newPanel = new Panel(); 7 newPanel.Width = int.Parse(width); 8 newPanel.Height = int.Parse(height); 9 newPanel.BackColor = Color.Yellow; 10 11 splitContainer1.Panel2.Controls.Add(newPanel); 12 }

panel2の位置に自分で書いたプログラムによって描かれる上記四角形を表示したい

を実現するのがイベントハンドラ(=上記プログラム)です。

サンプル

投稿2017/08/30 03:10

ShikaTech

総合スコア468

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

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

Daidaya

2017/08/30 18:59

回答ありがとうございます。 イメージの通りであっています。xyはサイズでもあって座標でもあります。 □を使ってフィールドを表したい。と言えば分かりますでしょうか? □は#でも$でも構いません。単純に分かりやすいのでそれを使用しているだけです。 x = 5 , y = 3 の場合は □□□□□ □□□□□ □□□□□ このような□で表した、大きな四角形が表示されるようにしたいのです。 (コマンドプロンプトで、テトリスなど作ったときに背景のフィールドをこのように表した事がありましたので、今回もやってみようと思ったのです) SplitContainerをHTMLのフレーム? のように考えて使えるのかな、と思ったのですが。 回答がつかないので、無理なのかな。とちょっと思ってます。
ShikaTech

2017/08/31 01:24

なるほど、イメージつきました。 碁盤の目スタイルの要素を任意の行列数で表したいってことですね。 であればSplitContainerだと不適当で、TableLayoutPanelならいかがでしょう。 https://dobon.net/vb/dotnet/control/tlbeginning.html
Daidaya

2017/08/31 17:56 編集

返信ありがとうございます。 TableLayoutPanelで碁盤の目を表示させると良い。という返答であっていますでしょうか。 ええと、SplitContainerを使って碁盤の目を表したいというわけではないのです。 配列[y,x] を別に用意してですね。そこにfor文で□を一つずつ入れていき、 OnPaintを使って碁盤を表示させたいのです。 (ここまで最初から書けばよかったですね。申し訳ないです) ただ上のコードを書くことはできても、どうやって splitContainer1 にそれを追加したら良いかが分からないのです。 視覚的にデザインしやすかったので splitContainerを使ってみたのですが、こういう使い方は不可能なのでしょうか?
guest

0

ベストアンサー

いまいちやりたいことが理解できてなくて申し訳ないのですが、
splitContainerに何かコントロールを追加したい(今回だとtableLayoutPanel?)と認識しました。
ソースべた書きですが不明な点や間違ってる点があれば指摘ください

Xの数の右のコントロール : numericUpDown1
Yの数の右のコントロール : numericUpDown2
ボタン : button1
SplitContainer : splitContainer1
イメージ説明

ボタンをダブルクリックしてbutton1のイベントハンドラを生成
その中に下記ソースコードを書く
ソースコード

csharp

1 private void button1_Click(object sender, EventArgs e) 2 { 3 var tableLayoutPanel = new TableLayoutPanel(); //新しくPanelを生成 4 tableLayoutPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; //見えるようにボーダー設定 5 tableLayoutPanel.Size = new Size(10, 10); //初期サイズを設定 6 tableLayoutPanel.AutoSize = true; //オートサイズ指定 7 8 var numx = (int)numericUpDown1.Value; // 横の数 9 var numy = (int)numericUpDown2.Value; // 縦の数 10 11 tableLayoutPanel.RowCount = numy; //横の数を指定 12 tableLayoutPanel.ColumnCount = numx; //縦の数を指定 13 14 foreach (var x in Enumerable.Range(0, numx)) 15 { 16 //ループして横の数分要素をInsert 17 tableLayoutPanel.ColumnStyles.Insert(x, new ColumnStyle(SizeType.Absolute, 10)); 18 } 19 20 21 foreach (var y in Enumerable.Range(0, numy)) 22 { 23 //ループして縦の数分要素をInsert 24 tableLayoutPanel.RowStyles.Insert(y, new RowStyle(SizeType.Absolute, 10)); 25 } 26 27 //すでに入ってるsplitContainer1.Panel2(右側のパネル)に入っているコントロールを一度削除 28 splitContainer1.Panel2.Controls.Clear(); 29 30 //新しくsplitContiner1.Panel2にtableLayoutPanelを追加 31 splitContainer1.Panel2.Controls.Add(tableLayoutPanel); 32 }

実行結果
イメージ説明

投稿2017/09/04 13:57

編集2017/09/04 13:58
MMashiro

総合スコア2378

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

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

Daidaya

2017/09/05 12:24

申し訳ないです。ちょっと理解に時間がかかってます。 初心者が手出しをすべき物ではなかった気がしてます。
Daidaya

2017/09/05 16:34 編集

質問文は splitcontainer1 から出力された数値を元にした、自作プログラムの実行結果を splitcontainer2 に表示させるにはどうしたら良いか。 が適切だったようです。□を例に出したのも悪かったし、長くかけば良いものではないという良い例になってしまいました。 先ほど、カスタムコントロールなんてものがある事を知った程度の私が挑戦すべき内容ではなかったようです。 もう少し勉強してから、再度挑戦したいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問