投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/12/18 17:41:29
> Public Property Form_Name As New Form

自クラス内で Form を New していることにあまり意味が無く、
外部からフォームを渡すことを想定した設計で、
かつ、外部から Form_Name を Nothing にされることを
許容したくないのなら、プロパティを引数に変更すると管理しやすいかと。


 '案1:コンストラクタでのみフォームを指定可能とする
 Public ReadOnly Property Form_Name As Form  'ReadOnly に変更(または Private にする)
 Public Sub New(targetForm As Form)
  If targetForm Is Nothing Then New ArgumentNullException()
  _Form_Name = targetForm
 End Sub

 '案2:Form をフィールド変数やプロパティとして持たず、メソッドローカル内に留める
  Public Sub Maker(Form_Name As Form)


> Dim ctrl As ComboBox = FindControl(Form_Name, ComboBox_Name)
右辺が As Control なのに左辺が As ComboBox になっているため、
これだと、Option Strict On の時にエラーになってしまいます。

代入式の右辺を
 = DirectCast(FindControl(Form_Name, ComboBox_Name), ComboBox)
もしくは
 = Form_Name.Controls.Find(ComboBox_Name, True).OfType(Of ComboBox).FirstOrDefault()
にすれば、Option Strict On にも対応できるかと思います。


> '各列に値をセット
> If i = 0 Then
ループ内で毎回 i の値をゼロチェックするよりも、
最初に追加してからループした方が手っ取り早そうです。

data_table.Rows.Add(0L, "未設定")
For Each dbRow In resultDt.Rows
   Dim newRow As DataRow = data_table.NewRow()
   newRow("ID") = dbRow.Item(3)  'value1 
   newRow("String_name") = dbRow.Item(2).ToString()  'name1 
   data_table.Rows.Add(newRow)
Next
data_table.AcceptChanges()



※本題と関係ない所にばかり反応…