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

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

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

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

Visual Studio

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Q&A

解決済

2回答

3177閲覧

Visual Studio C# プロパティ参照について

prince_vegeta

総合スコア7

C#

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

Visual Studio

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

0グッド

0クリップ

投稿2017/02/21 08:05

###前提・実現したいこと
当方、プログラミング初心者です。
現在勉強の一環として、マウスドラッグで矩形を作成し
その矩形にテキストボックスで入力した文字を表示させる
というものを作成しており、矩形は表示できたのですが
文字をプロパティに格納し、プロパティを参照して矩形に文字を表示させる
という部分ができずに困っております。
先輩方、ご教授をお願いいたします。

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

テキストボックスに入力された値をプロパティに格納し プロパティを参照して値を矩形に表示させる

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

namespace Form { public partial class Form1 : Form { /// <summary> /// コンストラクター /// </summary> public Form1() { InitializeComponent(); this.amtb = AttributeNameTextBox;//入力するテキストボックス this.reciter = new RectManIterator(); this.recmanager = new RectangleManager(); } private TextBox amtb; private RectManIterator reciter; private RectangleManager recmanager; /// <summary> /// 属性名指定テキストボックス キープレスイベントハンドラー /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AttributeNameTextBox_KeyPress(object sender, KeyPressEventArgs e) { this.recmanager.Clear(); this.recmanager.Add(this.amtb.Text); this.PicDisplay.Invalidate(); } /// <summary> /// ピクチャーボックス ペイントイベントハンドラー /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PicDisplay_Paint(object sender, PaintEventArgs e) { if (!String.IsNullOrEmpty(this.selectpath))//矩形の表示 { this.reciter.DrawRect(e.Graphics); this.reciter.DrawRectangles(e.Graphics); } if (!String.IsNullOrEmpty(this.amtb.Text))//文字の表示 { this.reciter.DrawStr(e.Graphics); } } } } namespace Form { /// <summary> /// マウス範囲指定の矩形オブジェクト管理クラス /// </summary> public class RectangleManager { /// <summary> /// 矩形の座標、大きさのデータ /// </summary> public Rectangle FrameRec { set { this.rect = value; } get { return this.rect; } } /// <summary> /// 矩形領域の属性名 /// </summary> public string AttributeName { set { this.attriname = value; } get { return this.attriname; } } /// <summary> /// コンストラクター /// </summary> public RectangleManager() { this.attriname = ""; this.rect = new Rectangle(0,0,0,0); } private string attriname; private Rectangle rect; /// <summary> /// 属性名の追加 /// </summary> /// <param name="st"></param> public void Add(string st) { this.attriname = st; } /// <summary> /// 属性名のクリア /// </summary> public void Clear() { this.attriname = ""; } } } namespace Form { /// <summary> /// 矩形マネージャークラスのイテレータクラス /// </summary> public class RectManIterator { /// <summary> /// 属性名の描画 /// </summary> /// <param name="g"></param> public void DrawStr(Graphics g) { var fnt = new Font("MS ゴシック", 30); var mylist = this.selectlist();//描画対象の矩形リスト var str = this.recmanager.AttributeName;//←"あいうえお"などに変えると表示される foreach (var myrec in mylist) { var po = new Point(myrec.FrameRec.X, myrec.FrameRec.Y);//表示させたい矩形の座標 g.DrawString(str, fnt, Brushes.Pink, po); } } } }

###試したこと
RectManIteratorクラスのDrawStrメソッド内のローカル変数strを
var str = "あいうえお";
などにすると矩形に表示されます。
またマウスの座標の管理(矩形移動時)なども同じようにしていますが
うまく動作しております

###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2015

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

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

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

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

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

guest

回答2

0

  • RectManIteratorクラスにプロパティを追加
  • AttributeNameTextBox_KeyPressでそのプロパティに値をセット
  • RectManIterator.DrawStrでそのプロパティを参照

とすればとりあえずお望みの動作はできそうですが、これでいいんでしょうか?

C#

1// 略 2 private void AttributeNameTextBox_KeyPress(object sender, KeyPressEventArgs e) 3 { 4 this.recmanager.Clear(); 5 this.recmanager.Add(this.amtb.Text); 6 this.reciter.AttributeName = this.amtb.Text; //★追加 7 this.PicDisplay.Invalidate(); 8 } 9// 略 10 public class RectManIterator 11 { 12 public string AttributeName { get; set; } //★追加 13// 略 14 public void DrawStr(Graphics g) 15 { 16 var fnt = new Font("MS ゴシック", 30); 17 var mylist = this.selectlist();//描画対象の矩形リスト 18 var str = this.AttributeName; //★修正 19// 略

何をするためのクラス群なのか理解できていないため、「とりあえず」の対応です。

投稿2017/02/21 08:23

alg

総合スコア2019

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

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

prince_vegeta

2017/02/21 08:57

解決しましたが、根本的なところが理解できていないような気がしました。 もう一度振り返って勉強してみます。 ご回答ありがとうございました!
guest

0

ベストアンサー

recmanager は Form1 のメンバーであって RectManIterator のメンバーではありませんね。
ですので

var str = this.recmanager.AttributeName;//←"あいうえお"などに変えると表示される

この部分は無いメンバーを参照しようとしています。

投稿2017/02/21 08:24

Zuishin

総合スコア28660

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

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

prince_vegeta

2017/02/21 08:56

おっしゃっている意味が何となくわかりました! なにか根本的なとこがわかっていないみたいですので振り返って勉強し直してみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問