2015-10-07 8 views
0

У меня есть программа клиентского сервера. Клиент - это студенты, поэтому я составил план места, который генерирует двухмерные кнопочные массивы.Назначение значения двумерному массиву

Button[,] btnSeat = new Button[8, 6]; 

Как я могу присвоить имя хоста клиента каждой кнопке, когда клиент находится в сети? Предположим, что уже есть имя хоста. Назначьте первого пользователя, который переходит в первый массив [0,0], а второй - в массив [0,1] и т. Д ....?

Это расположение моего плана сиденья enter image description here

Мне также нужно получить массив [х, у], которая равна это имя хоста. Пожалуйста, помогите, спасибо.

+0

Кроме того, похоже, что вам нужно пропустить столбцы 3-6 для строк 6 и 7. – juharr

+0

Я не думаю, что массив является правильной структурой данных здесь, словарь с «компьютерной» структурой данных будет более уместным, используя имя хоста в качестве ключа и «Компьютер», удерживающие позицию строки/столбца, имя хоста и любые данные о нужной станции. –

+0

он уже позаботился :), мне просто нужен способ присвоить определенное значение и получить его, пока сервер не перестанет получать данные. – charlie9495

ответ

3

Вот пример того, что я думаю, что было бы лучше, структура данных:

Для компьютера, необходимо провести какую-то информацию, таким образом, создать класс для компьютера:

public class Computer 
{ 
    public string HostName { get; set; } 
    public int Row { get; set; } 
    public int Column { get; set; } 
    //Whatever else you want to add, like 
    public bool IsActive { get; set; } 
    public bool IsScrewingAround { get; set; } 
} 

Тогда вы можете использовать словарь для хранения данных:

public Dictionary<string, Computer> _computers = 
    new Dictionary<string, Computer>(StringComparer.OrdinalIgnoreCase); 

И вы добавляете компьютеры к нему, как:

_computers.Add("someHostName", new Computer() 
    { 
     HostName = "someHostName", 
     Row = 0, 
     Column = 4, 
     IsActive = true, 
     IsScrewingAround = false 
    }); 

Тогда вы можете посмотреть компьютеры от имени хоста в O (1) операция, как:

var cpu = _computers["hostName"]; 

Или получить список компьютеров, которые завинчивание вокруг:

var screwOffs = _computers.Values.Where(c => c.IsScrewingAround); 

Хочет все компьютеры в строке 4?

var row4 = _computers.Values.Where(c => c.Row == 4); 

Это дает вам преимущество над массивом, что он может расти на основе количества Computer с добавленными к нему в случае, если ваши изменения формы комнаты.

Действительно, это может быть List<Computer>, если вам не нужен поиск O (1) для имени хоста, который, как я предполагаю, будет точным, учитывая относительно небольшое количество предметов, которые у вас есть в классе.

+1

это выглядит аккуратно и проще. кстати, я могу сохранить наборы кнопок, которые я сделал, или мне нужно сделать другой интерфейс? – charlie9495

+1

Вы можете сохранить кнопки, как хотите, даже установив для них ссылку на объект в «Компьютере», но я бы избегал этого, чтобы вы могли отделить свою бизнес-логику от логики пользовательского интерфейса. –

+1

Хм, я вижу ... я посмотрю на это больше. Спасибо, сэр :) – charlie9495

Смежные вопросы