1

10 個以上のボタンを持つ単純なフォームがあります。これらには、Button1、Button2 などの名前が付けられています。ユーザーは、ボタン テキストごとに単純な txt ファイルをフォルダーに保存する必要があります。なんで?各エンド ユーザーは、フォームを使用する次のユーザーとは異なる名前を各ボタンに付けたいと考えます。各ユーザーは、ニーズに合わせて独自のテキスト説明を設定する必要があります。(セットアップ時に1回)だから、私が持っているフォルダの場所に... Button1.txt、Button2.txtなど、それぞれデフォルトの開始テキストがあります。フォームの読み込み時に、txt ファイルをループして、ユーザーが編集した名前を各ボタンに追加したいと考えています。

これを長い手で機能させることができます...一度に1つずつ実行しますが、単純にループできる必要があることはわかっています...

これについていくつかのバリエーションを試しました

For i = 1 To 10
  Dim FILE_NAME As String = "C:\QuickButtons\ButtonTxt\Button" & i & ".txt"
  If System.IO.File.Exists(FILE_NAME) = True Then
  Dim objReader As New System.IO.StreamReader(FILE_NAME)
  Me.Controls("Button" & i).Text = objReader.ReadToEnd
  objReader.Close()
Next

「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示され続けます。

そこにいる誰かにとって、これは簡単なことです... 私に髪があれば、それを抜くでしょう!ですから、事前に多くの感謝を送ります。

4

2 に答える 2

0

より良い方法は、すべてのカスタム ラベルを含む単一の XML ファイルを用意することです。このようなもの:

<labels>
  <button index="0" name="button1" />
  <button index="1" name="button2" />
  ...
</labels>

設計に応じて、これはapp.config、またはスタンドアロン ファイル内にある場合があります。

于 2013-05-17T20:07:43.193 に答える
0

問題はおそらくここにあります:

Me.Controls("Button" & i).Text = objReader.ReadToEnd

これは、ボタンがフォームに直接含まれている場合にのみ成功します。パネルなどの別のコンテナにある場合、失敗します。

1 つの解決策は、次のようにコントロールを検索することです。

    For i As Integer = 1 To 10
        Dim FILE_NAME As String = "C:\QuickButtons\ButtonTxt\Button" & i & ".txt"
        If System.IO.File.Exists(FILE_NAME) Then
            Dim matches() As Control = Me.Controls.Find("Button" & i, True)
            If matches.Length > 0 AndAlso TypeOf matches(0) Is Button Then
                Dim btn As Button = DirectCast(matches(0), Button)
                btn.Text = System.IO.File.ReadAllText(FILE_NAME)
            End If
        End If
    Next
于 2013-05-17T21:55:56.873 に答える