0

ボタンをクリックすると、ゲーム サーバー上のプレイヤー情報が取得されます。これをグリッドに表示する方法を見つける必要があります。

Console.Write(sendRConCommand("players")) を実行すると

これは私のコンソールに出力されます:

Players on server:
[#] [IP Address]:[Port] [Ping] [GUID] [Name]
--------------------------------------------------
0   XXX.XXX.XXX.XXX:XXXX    46   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) [FF]Otto
1   XXX.XXX.XXX.XXX:XXXX   109  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) [BBC] Emma Watson
2   XXX.XXX.XXX.XXX:XXXX      46   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) [FF]Miikka
3   XXX.XXX.XXX.XXX:XXXX   46   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Bops
4   XXX.XXX.XXX.XXX:XXXX      32   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) [BBC] Wesley Snipes
5   XXX.XXX.XXX.XXX:XXXX    31   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Pierre
6   XXX.XXX.XXX.XXX:XXXX     46   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) bertrand
7   XXX.XXX.XXX.XXX:XXXX     -1   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) SIGGI (Lobby)
8   XXX.XXX.XXX.XXX:XXXX    47   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Min (Lobby)
9   XXX.XXX.XXX.XXX:XXXX     32   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Frostpwnz
10  XXX.XXX.XXX.XXX:XXXX   31   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Zulu BASSA (Lobby)
11  XXX.XXX.XXX.XXX:XXXX     31   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Zardock (Lobby)
14  XXX.XXX.XXX.XXX:XXXX    63   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) plbmas
(13 players in total)

この情報をグリッドに表示する方法と、列ヘッダーも表示する方法を理解する必要があります。

前もって感謝します :)

4

4 に答える 4

1

テキストをデータ構造に変換する必要があります。現在はすべてテキストなので、1 列のみで表示されます。

キャリッジ リターンに基づいてデータを分割し、各プレーヤーの行 (3 行目以降) で列を分割することをお勧めします。以下は大まかなコードの概要です。必要に応じて編集してください。

        // Setup Datatable to hold the information
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[] {
            new DataColumn("Number", typeof(int)), 
            new DataColumn("IP Address", typeof(string)),
            new DataColumn("Ping", typeof(int)),
            new DataColumn("GUID", typeof(string)),
            new DataColumn("Name", typeof(string))
        });

        // Get info            
        string info = sendRConCommand("players");

        // Split Rows
        string[] infoRows = info.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
        int start = 3; // ignore first 3 lines
        while (start < infoRows.Length - 1) // Ignore last line
        {
            // Split row on spaces, and remove anything that is an empty space
            string[] row = infoRows[start].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            DataRow dr = dt.NewRow();
            dr["Number"] = int.Parse(row[0].ToString());
            dr["IP Address"] = row[1].ToString();
            dr["Ping"] = int.Parse(row[2].ToString());
            dr["GUID"] = row[3].ToString();
            int nameItem = 4;
            while (nameItem < row.Length)
            {   // Names can have spaces, so we need to merge
                dr["Name"] += " " + row[nameItem].ToString();
                nameItem++;
            }
            dr["Name"] = dr["Name"].ToString().Trim(); // Trim any leading spaces
            dt.Rows.Add(dr);
            start++;
        }

        // Job Done
        mygridview.DataSource = dt;

mygridviewあなたのグリッドはどこですか。

すべてをデータテーブルに入れましたが、カスタムオブジェクト、リストなども機能します。

于 2012-11-28T12:16:06.213 に答える
1

ゲームサーバーからどのように返されるかによって異なります...文字列からの場合、これを解析(分割)してから、グリッドが処理する形式に配置する必要があります..

その DataGridView (winform) の場合、データ ソースは list<> を受け取ります。

于 2012-11-28T11:57:04.030 に答える
1

次のように string.Format を使用して幅を指定できます。

string.Format("{0,-10}{1,-10}", "column1", "column2");

ここで、負の値は左揃えの値です。ここを参照してください: http://msdn.microsoft.com/en-us/library/fht0f5be.aspx

于 2012-11-28T11:58:23.423 に答える
0

WPF グリッドが必要な場合は、次のようにします。

フォームDataGridを装着します。DataGrid のAutoGenerateColumnsプロパティを に設定しますTrue

コード ビハインド セットdataGrid.ItemsSource = playerInfo(リストの配列)

于 2012-11-28T12:05:59.160 に答える