2015-08-10 4 views
0

Хорошо, я инженер-программист на 1-м году, я новичок в C#, и у меня есть проект по химии, где мы создадим приложение периодической таблицы. Проблема в том, как сортировать снимки в C#, например, одним щелчком мыши будет отображаться только все щелочные металлы, и все неалканные металлы исчезнут.C# изменение формы формы с помощью кнопки

Я попытался создать формы с уже отсортированными элементами и одним нажатием кнопки, скажем, «Щелочной металл», будет отображена форма щелочного металла, и старая форма будет скрыта. Но я считаю его уродливым и запутанным.

Так что я планирую просто изменить макет формы одним щелчком мыши, но как мне это сделать?

+1

Ну. Как человек, как бы вы это сделали? Как вы храните эти фотографии внутри? какие структуры данных и код, по вашему мнению, вам могут понадобиться? – BugFinder

+0

Какая технология это приложение? Формы Windows, WPF, Webforms, MVC и т. Д.? – Mant101

+1

Можете ли вы показать одно из следующих: 1) Изображение того, что вы пытаетесь достичь 2) Некоторый код – Gnqz

ответ

0

Если бы я был вами, я бы сделал что-то очень простое, я бы создал периодическую таблицу, используя все коробки с картинками.

Далее я хотел бы добавить логическое значение каждый из графических блоков, как вы сказали, являются ли является щелочным металлом и т.д.

Я не уверен, если вы сделали Массивы еще, но это было бы проще чтобы сделать это, просто каждый бит в массиве соответствует каждому окну изображения в вашей форме.

Итак, чтобы отфильтровать их, вы просто нажмете кнопку, а затем перейдете через массив bools, если вы увидите тот, который установлен на Alkaline Metal, вы оставите этот файл с изображениями. Видимый = включен, и если его не один измените picturebox.Visible = false.

Я действительно думаю, что дизайн первого года на низком уровне - это лучшее, что вы могли бы сделать, я не знаю ни одного из ваших впечатлений, но я бы не стал создавать несколько форм, я бы просто спрятал картинки, которые вы не делаете хочу видеть с помощью приведенных выше команд.

Удачи и дайте мне знать, как вы поживаете.

0

При возникновении определенного события вы можете изменить некоторые свойства форм (например, Ширина, Высота) (нажмите кнопку). Это означает, что вы можете изменить размер формы в результате нажатия кнопки. Кроме того, у вас может быть несколько контейнеров (групповой ящик, картинка и т. Д.) В форме, но с видимым свойством, установленным на false, и когда кнопка нажата, измените ее на true

0

Я не эксперт, но, как некоторые уже указываемые наилучшим подходом было бы иметь каждый элемент как рис внутри формы, группировать их в массив, например alkalineMetals [] = {picMetal1, picMetal2 и т. д.}; Затем, если пользователь выбирает не являющиеся щелочные металлы, например, вы можете установить ПОС свойства видимого ложь:

 private void button1_Click(object sender, EventArgs e) 
    { 
     pictureBox1.Visible = false; 
    } 
0

Чтобы сделать таблицу выглядеть как real periodic table вам нужны не только данные и/или изображения, которые требуются дисплей.

Вам также необходимо сохранить правила размещения для каждого.

Для базовой таблицы это будут просто номера строк &; но для более гибкого отображения, который вы хотите создать, вам также потребуется немного больше, скажем, идентификатор группы, лучший как перечислимый.

Чтобы отобразить их, вы можете использовать DataGridView или TableLayoutPanel.

При переключении дисплея вы очищаете контейнер и начинаете заполнять все элементы, принадлежащие к группам, которые вы хотите отображать с заданными координатами.

Вы должны собрать изображения в ImageList и создать Labels, присвоив их BackGroundImages изображению с ImageList.

Вам нужно будет следовать дополнительным правилам размещения при переключении дисплея? Есть некоторые, насколько я помню химию ..

Таким образом, вы должны начать с создания class Element и дать ему некоторые свойства, такие как Int и Column и imageIndex и groupID; затем enum ElementGroups { AlkalineMetals, NonAlkalineMetals.. };

Затем определите макет с необходимым Checkboxes для групп, отображаемых или скрытых. Наконец, контейнер, скажем, TableLayoutPanel, достаточно большой, чтобы держать все элементы.

Другое дело, хотите ли вы действительно использовать изображения или скорее создать динамическое отображение элементов из данных. Обычно это не связано с тем, что 2-4 строки для печати и задний цвет. Не ракеты, чтобы нарисовать это.

Вы уже получили data?

+0

Я планирую использовать окно с изображением, чтобы отображать элементы один за другим, и когда нажимается окно с изображением, он будет отображать элементы в другой форме с помощью окна с изображением снова со всей информацией. У меня также есть простые знания по Photoshop, так что это будет легко. Все, что мне нужно - это сортировать их. Спасибо за ваш ответ кстати. –

+0

PictureBox как таковой может отображать только одно изображение. Таким образом, чтобы отобразить несколько элементов, вам придется либо использовать несколько PictureBoxes, либо нарисовать изображение каждого элемента на одной большой поверхности PictureBox. Для 1-го пути вы поместите ПБ в правильные места в контейнере, возможно, в форму; для второго способа вы нарисовали изображения в событии рисования в правильных координатах, используя призыв DrawImage для каждого. Оба могут выполняться динамически. – TaW

+0

- Для обоих случаев вам нужно что-то знать о макете. Для этого рисунка их все в Photoshop не будет делать. Вам нужно прикрепить свои координаты к изображениям. Либо, скажем, называя их каким-то умным способом или, что намного лучше, создавая элемент вызова со всеми необходимыми данными, включая, возможно, имя файла. Но, как я уже сказал, если у вас есть данные (Atomic number & weight, Name, Symbol), их рисование с помощью четырех вызовов DrawString довольно просто. Если вы добавляете Group и Period в тип данных и элементов, вы должны использовать их для расчета coodains и Color. – TaW