2013-08-02 1 views
0

У меня проблема с типами конвертирования. Мой mainForm сохраняет переменную в целочисленном типе. Также моя форма имеет свойствоGrid, где я понял свойство для поля (например, combobox) с изображением & Текст. И теперь я не понимаю, как я могу преобразовать один тип в другой. Сначала мне нужно преобразовать данные из int в myProp, а затем наоборот. Здесь установка PropertyGrid:Преобразование одного типа в другой

public dashPatternList DashPattern 
    { 
     get { return dashPattern; } 
     set { dashPattern = value; } 
    } 

Здесь я пытался реализовать мою проблему с дополнительными методами:

private dashPatternList dashIN(int dash) 
    {      
     dashPatternList ds = dashPatternList.pic0; 
     if (dash == 1) ds = dashPatternList.pic1; 
     if (dash == 2) ds = dashPatternList.pic2;  
     return ds; 
    } 

    private int dashOUT(dashPatternList dash) 
    { 
     int i = 0; 
     if (dash == dashPatternList.pic1) i = 1; 
     if (dash == dashPatternList.pic2) i = 2; 
     return i; 
    } 

И называют это:

pData.DashPattern = dashIN(dashPattern); 
dashPattern = dashOUT(pData.DashPattern); 

Этот метод работает, но, может быть, вы предлагаете мне более простой способ.

ответ

1

Вы можете сохранить изображения в массиве, поэтому вместо dashIN(dash) вы должны написать dashIN[dash] (и вам не нужно писать функцию dashIN). Вам просто нужно инициализировать один раз что-то вроде этого:

DashPattern[] dashIN = new DashPattern[] { 
    dashPatternList.pic0, dashPatternList.pic1, dashPatternList.pic2 }; 

Для реверса, что-то вроде Array.IndexOf(dashIN,mypic) должно работать.

Таким образом, вы заменяете код данными, который, как правило, очень хорош, так как его проще управлять. Например, теперь вам нужно изменить только одну строку, если вы хотите изменить список тире, вместо того, чтобы раньше менять код в двух функциях. Плюс теперь невозможно сделать ошибку, которая вызвала бы dashOUT(dashIN(dash))!=dash (как если бы в коде был неправильный номер).

+0

ОК, я использую myDash [] с коллекцией dashPatternList. Я мог бы ввести этот метод. Но я не могу работать с ним. Когда я использую myDash. У меня нет IndexOf. Я подключаю System.Collections. Но ничего не видно – mit

+0

Неплохо, это Array.IndexOf (dashIN, mypic). Я исправляю ответ. – redtuna

+0

танков, все работает! Может быть, вы можете мне помочь: http://stackoverflow.com/questions/18022665/propertygrid-change-size-of-image-text-field. – mit