実現したいこと
RichTextBoxの表示位置やサイズなどを作成したクラスとは別のクラスで、でRichTextBoxのUIにAppendし、追加した文字列をUIに表示させたいです。
何故別のクラスである必要があるのか、についてですが、別のクラスからではないといけないと思い込んでいるからで、本当は、別のクラスからでなくとも良いのかもしれないです。
ただ、何ができて何ができないのかなど、C#・プログラミング言語に明るくないので、ひとまず、別のクラスから文字列を追加する方法を知りたいです。
発生している問題・分からないこと
public void B()内のDebug.WriteLineの結果は、test:System.Windows.Forms.RichTextBox, Text: void BHello, World!のようになっています。
しかし、UIには文字列が追加されていません。
該当のソースコード
C#
1//Fomr1Designer.cs2namespace 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 code17 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 #endregion30 private NewApp.ClassA classA ;31 }32}33
C#
1//Form1.cs2using 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.cs2using 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 code19 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 // richTextBox30 // 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 // TabPagerich39 // 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 // tabControl150 // 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 // ClassA59 // 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 #endregion75 private Button button1;76 }77}78
C#
1//ClassA.cs2using 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.cs2namespace 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
試したこと・調べたこと
上記の詳細・結果
stackoverflowでCan't add to a RichTextBox from another class?というページや、そのほか慣例ページを見ました。
自分に起きている問題と同じ、或いは似ていると思うのですが、コードの詳細が簡略化されており、こちら側で応用することが叶いませんでした。
今のところ漠然と、インスタンスの作成の仕方や、処理の順番のによる問題なのかなと思っています。
ChatGPT3.5には、私の伝え方がなっていないためか、見当違いと思われる、たくさんの返答をいただきました。
補足
プログラミング言語自体全くの初心者です。
インスタンスに関しての理解は、用意した構造体を複製したモノ、という程度の理解しかありません。
上記のコードは実際に扱っているコードを、今回の問題に関係ありそうな部分を取り出して、できるだけ同じ構造になるように単純化したものです。
提示した、上記コードはVisual Studio2022を使用していますが、実際には
Visual Studio2019、.NET Framework ver 4.0を使用しています。
実際に扱っているコードはオープンソースのものです。
深い理由はないですが、何を扱っているかのURLは提示しないつもりです。複雑なことに対して、私が混乱しそうなので。
実際の環境では諸事情で、デザイナーズファイルを使用して、コードを追加するということが出来なくなってしまいました。

0 コメント