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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Visual Studio

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

2回答

1123閲覧

vb.netにて子コントロール内にいるラベルテキストを編集したい

alastashim

総合スコア16

Visual Studio

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2022/09/10 11:22

前提

デザイン
親UserControl内に子Controlを配置しています(画像1)
子UserControlにはLabelを2つ配置しています(画像2)

①画像1
イメージ説明

②画像2
イメージ説明

実現したいこと

Hoge()を呼び出したときに子UserControl内のLabel.Textを編集したい
Controlのプロパティは以下のソースコードようにいじれるが、子UserControl内のラベルのプロパティを編集できない

該当のソースコード

VB.NET

1Imports System.Windows.Forms 2 3Public Class Form1 4 'フィールド 5 Private uctOya() As System.Windows.Forms.UserControl 6 Private uctKodomo() As System.Windows.Forms.UserControl 7 8 Private Sub Hoge() 9 Me.uctOya = New uctOya(0) {} 10 Me.uctKodomo = New uctKodomo(1) {} 11 Me.SuspendLayout() 12 13 'インスタンス生成 14 Me.uctOya(0) = New uctOya 15 Me.uctKodomo(0) = New uctKodomo 16 Me.uctKodomo(1) = New uctKodomo 17 18 'プロパティ設定 19 Me.uctOya(0).Name = "Oya" 20 Me.uctOya(0).Location = New Point(0, 0) 21 Me.uctOya(0).Size = New Size(500, 100) 22 23 End Sub 24 25End Class

まだまだ初心者でわからないことが多いのですが、考え方のご教授よろしくお願いいたします.

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

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

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

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

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

guest

回答2

0

前の質問の続きであれば、uctOya のデザイン時に uctKodomo を貼り付けてください。

イメージ説明

そうすると、こんな感じに書けます。

vb

1Public Class Form1 2 3 Private ReadOnly OyaList As New List(Of uctOya) 4 5 Public Sub New() 6 InitializeComponent() 7 OyaAdd("oya1", New Point(10, 10)) 8 OyaAdd("oya2", New Point(10, 120)) 9 End Sub 10 11 Protected Function OyaAdd(name As String, location As Point) As uctOya 12 Dim oya As New uctOya With { 13 .Name = name, 14 .Location = location, 15 .Size = New Size(500, 100) 16 } 17 OyaList.Add(oya) 18 Panel1.Controls.Add(oya) 19 Return oya 20 End Function 21 22 Protected Sub OyaRemoveAt(index As Integer) 23 Dim oya As uctOya = OyaList(index) 24 OyaList.RemoveAt(index) 25 Panel1.Controls.Remove(oya) 26 End Sub 27 28 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 29 OyaList(0).UctKodomo1.Label1.Text = "A" 30 OyaList(0).UctKodomo1.Label2.Text = "B" 31 End Sub 32 33End Class

投稿2022/09/10 22:10

編集2022/09/10 22:11
KOZ6.0

総合スコア2707

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

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

0

最終的にどこまでやりたいのか分かりませんが、
・子UserControlにラベルのテキストを指すプロパティを用意する
・ラベルのテキストを変更するようなメソッドを用意する形にする
・ラベルそのものを返すプロパティを用意する
といった方法が考えられるかと思います。

投稿2022/09/10 12:11

YAmaGNZ

総合スコア10498

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

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

alastashim

2022/09/10 15:41

>YAmaGNZ様 コメントありがとうございます。 例えば、子UserControlに以下のメゾットを追加 Public Sub ChangeLabelText(ByVal name) Label1.Text = name End Sub その後、質問時のソースコードの中に呼び出しを書くとしたらどのように書けばいいのでしょうか。 お手数ですが、考え方などをお教え願えますと幸いです。
YAmaGNZ

2022/09/10 23:44 編集

uctKodomo(0).ChangeLabelText("TEST") ってことでは? 親コントロールに対して、自分の子コントロールはこれですよって感じのコードがないのでそのあたりのことは知りませんが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問