6

リスト ボックス内に名前と価格を挿入するアプリケーションが 1 つありますWinForms。名前と価格はそれぞれ 2 次元配列に格納されます。から1つのレコードを選択するlistboxと、そのレコードを更新するために文字列の名前と価格を取得できるインデックスが1つだけ表示されます。このために、そのインデックスで名前と価格を変更する必要があります。価格。ただし、選択されたインデックスは 1 次元のみです。そのインデックスを行と列に変換したい。どうやってするか?

しかし、私はこのようにリストボックスにレコードを挿入しています。

int row = 6, column = 10;
for(int i=0;i<row;i++)
{
    for(int j=0;j<column;j++)
    {
        value= row+" \t "+ column +" \t "+ name[i, j]+" \t " +price[i, j];
        listbox.items.add(value);
    }
}
4

4 に答える 4

39

正確なシナリオを完全には理解していませんが、1D 座標と 2D 座標を変換する一般的な方法は次のとおりです。

2D から 1D へ:

index = x + (y * width)

また

index = y + (x * height)

左から右に読むか、上から下に読むかによって異なります。

1D から 2D へ:

x = index % width
y = index / width 

また

x = index / height
y = index % height
于 2013-05-28T11:19:09.067 に答える
0

これを試して、

int i = OneDimensionIndex%NbColumn
int j = OneDimensionIndex/NbRow //Care here you have to take the integer part
于 2013-05-28T11:17:45.673 に答える
0

さて、私があなたを正しく理解していれば、あなたの場合、明らかにListBoxエントリの配列エントリのインデックスはListBox. 名前と価格は、その配列要素のインデックス0とインデックスにあります。1

例:

string[][] namesAndPrices = ...;

// To fill the list with entries like "Name: 123.45"
foreach (string[] nameAndPrice in namesAndPrices)
   listBox1.Items.Add(String.Format("{0}: {1}", nameAndPrice[0], nameAndPrice[1]));

// To get the array and the name and price, it's enough to use the index
string[] selectedArray = namesAndPrices[listBox1.SelectedIndex];
string theName = selectedArray[0];
string thePrice = selectedArray[1];

そのような配列がある場合:

string[] namesAndPrices = new string[] { "Hello", "123", "World", "234" };

物事は異なります。その場合、インデックスは

int indexOfName = listBox1.SelectedIndex * 2;
int indexOfPrice = listBox1.SelectedIndex * 2 + 1;
于 2013-05-28T11:17:50.033 に答える