Контролите PictureBox имат ли друг атрибут, различен от .Name за идентификация

Не можах да намеря нищо тук в StackOverflow, което да отговори на въпроса ми. Надявам се да го изясня тук.

Създадох приложение за windows form, което е играта Yahtzee. Правя го за забавление и почти съм готов. Това, което се опитвам да постигна е следното.

Когато потребителят иска да запази резултат за определена категория, той просто щраква върху полето за картина, което е свързано с избраната от него категория. Изпълняват се някои проверки и уравнения, които са последвани от метод display(). Този метод регистрира в текстовата област на GUI колко точки са отбелязали току-що.

Опитвам се да направя регистрирането по-лесно за четене и по-смислено. Ето преди и след това, което се опитвам да постигна.

текущ код

...AppendText(\nscored: + NewYahtzee.Rollscore + точки за + ((PictureBox)подател).Име)

токов изход

отбеляза 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, което ви позволява да асоциирате или свържете определен UI елемент с всяка част от данните (или екземпляр на клас), от която се нуждаете, премахвайки необходимостта от отвратителни хакове като свойството 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