Имеют ли элементы управления PictureBox другой атрибут, кроме .Name, для идентификации?

Я не смог найти здесь на StackOverflow ничего, что ответило бы на мой вопрос. Надеюсь, я ясно выразился здесь.

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

Когда пользователь хочет сохранить оценку для определенной категории, он просто нажимает на изображение, связанное с выбранной им категорией. Выполняются некоторые проверки и уравнения, за которыми следует метод display(). Этот метод записывает в текстовую область графического интерфейса, сколько очков они только что набрали.

Я пытаюсь сделать журнал более удобным для чтения и более содержательным. Вот до и после того, что я пытаюсь выполнить.

текущий код

...AppendText(\nscored: + NewYahtzee.Rollscore + баллы за + ((PictureBox)sender).Name)

выходной ток

набрал 50 баллов за pictureBoxYahtzee

Вывод, который я хочу

Набрал 50 очков за свой Yahtzee

Поэтому я пытаюсь заменить имя элемента управления понятным/отображаемым именем. Есть ли такой атрибут или способ сделать это?

Спасибо!


person GIZNAJ    schedule 16.07.2014    source источник
comment
msdn.microsoft.com /en-us/library/ Вы можете использовать свойство Tag или Text, если вы еще не используете его.   -  person eddie_cat    schedule 16.07.2014
comment
Это класс .NET, как и любой другой. Поэтому просто создайте из него свой собственный класс и добавьте любые свойства, необходимые для его идентификации.   -  person Hans Passant    schedule 16.07.2014
comment
Если вам нужна читаемая пользователем строка, используйте Text. Для чего-то более сложного, например, структуры строк или чего-то еще, используйте Tag!   -  person TaW    schedule 16.07.2014
comment
- или - используйте текущую технологию ( в отличие от архаичных winforms), который имеет лучшую поддержку DataBinding, что позволяет вам связать или связать определенный элемент пользовательского интерфейса с любым фрагментом данных (или экземпляром класса), который вам нужен, устраняя необходимость в отвратительных хаках, таких как свойство Tag или создавать свои собственные классы пользовательского интерфейса только для того, чтобы пользовательский интерфейс мог хранить данные.   -  person Federico Berasategui    schedule 16.07.2014
comment
Свойство Text PictureBox задокументировано как Этот API поддерживает инфраструктуру .NET Framework и не предназначен для использования непосредственно из вашего кода. В результате я бы избегал этого, чтобы быть в безопасности, и использовал Tag, как предложил AnotherUser в своем ответе.   -  person Craig W.    schedule 16.07.2014
comment
Спасибо всем! Я собираюсь использовать свойство Tag. Я не знал, что он существует. Это определенно то, что я ищу.   -  person GIZNAJ    schedule 16.07.2014
comment
Я не совсем уверен, но я думаю, что .Tag является свойством Control, поэтому любой Control, который у вас есть, вероятно, имеет свойство .Tag, которое работает точно так же. Его очень полезно использовать с элементами списка.   -  person AnotherUser    schedule 16.07.2014


Ответы (2)


Как сказали оба комментатора выше.

1. Вы можете использовать свойство .Tag объекта PictureBox.

Если вы хотите назначить некоторую информацию для PictureBox, просто сделайте

String info = "MyInfo"; 
pictureBox1.Tag = (object)info;

Самое интересное, что если .Tag является object, вы можете вставить что угодно в свойство .Tag. Таким образом, вы можете создать собственный класс, наполненный информацией, и назначить его .Tag

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

if(pictureBox1.Tag is String)
{
    String info = (String)pictureBox1.Tag;
}

2. Другой вариант — расширить класс PictureBox и добавить к нему общедоступные свойства.

class PictureBoxEx : PictureBox
{
    public String info { get; set; }

    public PictureBoxEx()
    {
    }
}

Затем найдите определение вашего объекта PictureBox, как сейчас, и просто измените его тип с PictureBox на PictureBoxEx, и все должно быть таким же, за исключением того, что теперь ваша ссылка PictureBoxEx имеет общедоступное поле info.

person AnotherUser    schedule 16.07.2014

1) Вы можете создать свой собственный производный класс, как указано выше.

2) Вы можете временно изменить имя элемента управления.

3) Вы можете сохранить его где-нибудь еще (возможно, в настройках).

Я бы просто добавил свойство в pictureBox.

person aguertin    schedule 16.07.2014
comment
Просто из любопытства, как мне получить класс в этой ситуации? - person GIZNAJ; 16.07.2014
comment
Смотрите раздел 2 моего ответа. Это должно быть все, что вам нужно, просто создайте класс в своей среде IDE и вставьте его туда, затем измените любое PictureBox, которое вы хотите иметь, на PictureBoxEx (вам, вероятно, придется построить после добавления класса). - person AnotherUser; 16.07.2014