tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB.NET テキストボックス 改行 ランダム表示
記事No11553
投稿日: 2015/12/18(Fri) 16:32
投稿者ちんちろりん
VB2010にて以下のことを実現したいですが、思ったようにうまくいきません。

[ボタン1]
[テキストボックス1]
[テキストボックス2]
[テキストボックス3]
[テキストボックス4]
[テキストボックス5]
[テキストボックス6]
[テキストボックス7]

ボタン1は実行ボタン
テキストボックス1には、改行で文字列が入力できる。
例えば、









テキストボックス2〜8にはテキストボックス1で書いた内容からランダムで1つ抽出し表示させる。
上の例だと、
[テキストボックス2]あ
[テキストボックス3]い
[テキストボックス4]う
[テキストボックス5]え
[テキストボックス6]お
[テキストボックス7]か
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'エラーがあっても実行
        On Error Resume Next
        'テキストボックス1に入力される文字
        Dim a() As String = {TextBox1.Text}
        '乱数の初期化
        Randomize()
        'テクストボックス1の改行の行数を数える
        Dim intLineCnt As Integer = TextBox1.Lines.Length
        'テキストボックス2に全改行から1つを抽出し、表示
        TextBox2.Text = a(Math.Floor(intLineCnt * Rnd()))
        'テキストボックス3に全改行-1行から1つを抽出し、表示
        TextBox3.Text = a(Math.Floor((intLineCnt - 1) * Rnd()))
        'テキストボックス4に全改行-2行から1つを抽出し、表示
        TextBox4.Text = a(Math.Floor((intLineCnt - 2) * Rnd()))
        'テキストボックス5に全改行-3行から1つを抽出し、表示
        TextBox5.Text = a(Math.Floor((intLineCnt - 3) * Rnd()))
        'テキストボックス6に全改行-4行から1つを抽出し、表示
        TextBox6.Text = a(Math.Floor((intLineCnt - 4) * Rnd()))
        'テキストボックス7に全改行-5行から1つを抽出し、表示
        TextBox7.Text = a(Math.Floor((intLineCnt - 5) * Rnd()))
    End Sub

改行で1列の文字として、認識させ、また、テキストボックス2〜7には重複した文字をいれたくないようにするのはどのようにすればいいのでしょうか。

[ツリー表示へ]
タイトルRe: VB.NET テキストボックス 改行 ランダム表示
記事No11554
投稿日: 2015/12/18(Fri) 17:10
投稿者魔界の仮面弁士
Public Class Form1

 Private TextBoxes() As TextBox

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
  'TextBox2〜7を配列にセット
  TextBoxes = Me.Controls.OfType(Of TextBox)() _
     .Where(Function(txt) txt.Name Like "TextBox[234567]").ToArray()
 End Sub

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  'TextBox2〜7には、TextBox1の各行からランダムで表示
  Dim r As New Random()
  Dim shuffled() As String = TextBox1.Lines.OrderBy(Function(s) r.Next()) _
     .Concat(Enumerable.Repeat("", TextBoxes.Length)).ToArray()

  For n As Integer = 0 To TextBoxes.GetUpperBound(0)
   TextBoxes(n).Text = shuffled(n)
  Next

 End Sub

End Class

[ツリー表示へ]