実現したいこと
RichTextBoxの表示位置やサイズなどを作成したクラスとは別のクラスで、でRichTextBoxのUIにAppendし、追加した文字列をUIに表示させたいです。
何故別のクラスである必要があるのか、についてですが、別のクラスからではないといけないと思い込んでいるからで、本当は、別のクラスからでなくとも良いのかもしれないです。
ただ、何ができて何ができないのかなど、C#・プログラミング言語に明るくないので、ひとまず、別のクラスから文字列を追加する方法を知りたいです。
発生している問題・分からないこと
public void B()内のDebug.WriteLineの結果は、test:System.Windows.Forms.RichTextBox, Text: void BHello, World!のようになっています。
しかし、UIには文字列が追加されていません。
該当のソースコード
C#
1//Fomr1Designer.cs 2namespace NewApp 3{ 4 partial class Form1 5 { 6 private System.ComponentModel.IContainer components = null; 7</param> 8 protected override void Dispose(bool disposing) 9 { 10 if (disposing && (components != null)) 11 { 12 components.Dispose(); 13 } 14 base.Dispose(disposing); 15 } 16 #region Windows Form Designer generated code 17 private void InitializeComponent() 18 { 19 AutoScaleDimensions = new SizeF(7F, 15F); 20 AutoScaleMode = AutoScaleMode.Font; 21 ClientSize = new Size(800, 450); 22 Name = "Form1"; 23 Text = "Form1"; 24 ResumeLayout(false); 25 this.classA = new NewApp.ClassA(); 26 this.Controls.Add(this.classA); 27 } 28 29 #endregion 30 private NewApp.ClassA classA ; 31 } 32} 33
C#
1//Form1.cs 2using System.Diagnostics; 3using System.Windows.Forms; 4using static System.Net.Mime.MediaTypeNames; 5namespace NewApp 6{ 7 public partial class Form1 : Form 8 { 9 //private Form2 _form2; 10 private ClassA _classA; 11 //public Form1(Form2 form2) 12 public Form1(ClassA classA) 13 { 14 _classA = classA; 15 InitializeComponent(); 16 B(); 17 } 18 public void B() 19 { 20 RichTextBox richTextBox = _classA.A(); 21 richTextBox.AppendText("void B"); 22 _classA.A().AppendText("Hello, World!"); 23 _classA.A().Refresh(); 24 Debug.WriteLine("test" + _classA.A()); 25 } 26 } 27} 28
C#
1//ClassA.Designer.cs 2using System; 3using System.Windows.Forms; 4namespace NewApp 5{ 6 partial class ClassA 7 { 8 private System.ComponentModel.IContainer components = null; 9 10 protected override void Dispose(bool disposing) 11 { 12 if (disposing && (components != null)) 13 { 14 components.Dispose(); 15 } 16 base.Dispose(disposing); 17 } 18 #region Windows Form Designer generated code 19 private void InitializeComponent() 20 { 21 richTextBox = new RichTextBox(); 22 TabPagerich = new TabPage(); 23 tabControl1 = new TabControl(); 24 button1 = new Button(); 25 TabPagerich.SuspendLayout(); 26 tabControl1.SuspendLayout(); 27 SuspendLayout(); 28 // 29 // richTextBox 30 // 31 richTextBox.Dock = DockStyle.Fill; 32 richTextBox.Location = new Point(3, 3); 33 richTextBox.Name = "richTextBox"; 34 richTextBox.Size = new Size(386, 266); 35 richTextBox.TabIndex = 0; 36 richTextBox.Text = ""; 37 // 38 // TabPagerich 39 // 40 TabPagerich.Controls.Add(richTextBox); 41 TabPagerich.Location = new Point(4, 24); 42 TabPagerich.Name = "TabPagerich"; 43 TabPagerich.Padding = new Padding(3); 44 TabPagerich.Size = new Size(392, 272); 45 TabPagerich.TabIndex = 0; 46 TabPagerich.Text = "RichText"; 47 TabPagerich.UseVisualStyleBackColor = true; 48 // 49 // tabControl1 50 // 51 tabControl1.Controls.Add(TabPagerich); 52 tabControl1.Location = new Point(12, 12); 53 tabControl1.Name = "tabControl1"; 54 tabControl1.SelectedIndex = 0; 55 tabControl1.Size = new Size(400, 300); 56 tabControl1.TabIndex = 0; 57 // 58 // ClassA 59 // 60 AutoScaleDimensions = new SizeF(7F, 15F); 61 AutoScaleMode = AutoScaleMode.Font; 62 Controls.Add(button1); 63 Controls.Add(tabControl1); 64 Margin = new Padding(4, 3, 4, 3); 65 Name = "ClassA"; 66 Size = new Size(495, 372); 67 TabPagerich.ResumeLayout(false); 68 tabControl1.ResumeLayout(false); 69 ResumeLayout(false); 70 } 71 private System.Windows.Forms.RichTextBox richTextBox; 72 private System.Windows.Forms.TabPage TabPagerich; 73 private System.Windows.Forms.TabControl tabControl1; 74 #endregion 75 private Button button1; 76 } 77} 78
C#
1//ClassA.cs 2using System; 3using System.Diagnostics; 4using System.Windows.Forms; 5using static System.Net.Mime.MediaTypeNames; 6 7namespace NewApp 8{ 9 public partial class ClassA : UserControl 10 { 11 public ClassA() 12 { 13 InitializeComponent(); 14 } 15 public RichTextBox A() 16 { 17 return richTextBox; 18 } 19 } 20} 21 22
C#
1//Program.cs 2namespace NewApp 3{ 4 internal static class Program 5 { 6 [STAThread] 7 static void Main() 8 { 9 ApplicationConfiguration.Initialize(); 10 ClassA classA = new ClassA(); 11 Application.Run(new Form1(classA)); 12 Application.Run(); 13 } 14 } 15} 16
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
stackoverflowでCan't add to a RichTextBox from another class?というページや、そのほか慣例ページを見ました。
自分に起きている問題と同じ、或いは似ていると思うのですが、コードの詳細が簡略化されており、こちら側で応用することが叶いませんでした。
今のところ漠然と、インスタンスの作成の仕方や、処理の順番のによる問題なのかなと思っています。
ChatGPT3.5には、私の伝え方がなっていないためか、見当違いと思われる、たくさんの返答をいただきました。
補足
プログラミング言語自体全くの初心者です。
インスタンスに関しての理解は、用意した構造体を複製したモノ、という程度の理解しかありません。
上記のコードは実際に扱っているコードを、今回の問題に関係ありそうな部分を取り出して、できるだけ同じ構造になるように単純化したものです。
提示した、上記コードはVisual Studio2022を使用していますが、実際には
Visual Studio2019、.NET Framework ver 4.0を使用しています。
実際に扱っているコードはオープンソースのものです。
深い理由はないですが、何を扱っているかのURLは提示しないつもりです。複雑なことに対して、私が混乱しそうなので。
実際の環境では諸事情で、デザイナーズファイルを使用して、コードを追加するということが出来なくなってしまいました。
回答2件
あなたの回答
tips
プレビュー