Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: string resource в VS-2003  (Прочитано 7812 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« : 16-04-2007 09:07 » 

Господа,

сразу оговорюсь - вопрос точно идиотский для тех, кто знает ответ, но совершенно животрепещущий для меня, т.к. я этот самый ответ никак не найду  С ума сойти... Посему просьба ногами пинать не очень сильно   Отлично
Я сейчас должна сделать корректуры в проекте, написанном на C#. При этом опыта на нем никакого, я до этого (да и продолжаю дальше) жить в мире VS6 и C++, посему все пытаюсь понять исходя из структуры данных в MFC.

Ситуация:
есть форма, содержащая PropertyGrid. Для этого грида есть класс, реализующий его свойства (т.е. все то, что мы затем видим в списке свойств).
Т.е. этот класс не связан с формой, НО! Я вижу, что для него существует файл .resx (откуда??? как его создать Не понял  Не понял  Здесь была моя ладья...), в котором есть такой параметр:

   <data name="I_VLANPriority">
      <value>VLAN Priority</value>
   </data>
   <data name="I_VLANPriority.Description">
      <value>Priority of telegrams.\n\n</value>
   </data>

А в самом классе есть соответственно:
   [CategoryAttribute("Parameters"), ReadOnlyAttribute(true), Browsable(true)]
   public string I_VLANPriority
   {
      get
      {
         return "lalala";
      }
   }

При старте грида я вижу название параметра как нормальный текст, т.е. "VLAN Priority" - как задано.

Мне потребовалось сделать пример, чтобы показать, как этот грид будет видоизменен. Я сделала - как ни странно в общих чертах работает Ага
Но!!! Когда я попыталась воссоздать то свойство, что описано выше + добавить что-то новое, у меня возникла проблема следующего вида:
1) я не смогла создать каркас для .resx - файла в студии, пришлось делать все своими "шкодными" ручонками (скопировав структуру уже готового файла)
2) вместо заданного текста "VLAN Priority" я вижу в гриде "I_VLANPriority" (т.е. имя переменной)!

И что все это значит??? Караул!!!  А черт его знает...
Общая проблема для меня - я никак не пойму, как организован ресурс типа "string table", который есть в VS6, т.е. если у меня есть какой-то текст, который должен быть затем переведен на несколько языков!

Еще раз прошу прощения за сумбур.
Самое обидное - я никак не найду какой-нибудь элемнтарный толковый пример с кодом для работы с PropertyGrid, где было бы все описано от "а" до "я", а не кусками. Если кто-то что-то имеет - ткните носом, плиииз!!!   Я шокирован!
Записан

холоднокровней, Маня, Ви не на работе
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-04-2007 15:44 » 

Чего-то я нифига из этой паники не понял. Понял вот это
Цитата
Общая проблема для меня - я никак не пойму, как организован ресурс типа "string table", который есть в VS6, т.е. если у меня есть какой-то текст, который должен быть затем переведен на несколько языков!

Посмотри классы
ResourceReader
ResourceWriter
ResXResourceReader
ResXResourceWriter
ResourceManager
Это для работы с ресурсом программным путем. Тыв увидишь, что ты можешь тупо создать ресурс с определенным именем и считать его.

Код:
// производиться запись
        ResXResourceWriter w = new ResXResourceWriterC'ReXForm.resx");
       
          // Добавляеи ресурс-изображение
          Image i = new BitmapC'happy.bmp");
          w.AddResource("happyDude",i):
             
              // Добавляем ресурс-строку текста
              w.AddResource("welcome$tnng", "Hello new resource format!");

                     // Сохраняем файл с добавленными ресурсами
                     w.GenerateO;
                     w.CloseC);
А вот чтение
Код:
        // Создаен объект ResXResourceReader
        ResXResourceReader r - new ResXResourceReaderC'ResXFonn.resx");

                                     
IDictionaryEnumerator en = r.GetEnumerator();
while Cen.MoveNext()
{
MessageSox.ShowC'Value:" + en. Value.ToStringO . "Key: " +
en.Key.ToString():
}
r.Close();
Я удивлюсь, если ты скажешь, что это неудобно. По сути ничего не треубется в дальнейшем, только файлы ресурсов менять Улыбаюсь.

Посмотри на класс РесурсМенеджер, он удобнее.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 16-04-2007 15:55 » 

Вот по ПропертиГриду, http://msdn2.microsoft.com/en-us/library/system.windows.forms.propertygrid(vs.71).aspx
Записан

ещё один вопрос ...
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #3 : 17-04-2007 09:04 » 

nikedeforest,

во-первых, огромное спасибо за объяснение о ресурсах! Сейчас начну разбираться.

Цитата
Я удивлюсь, если ты скажешь, что это неудобно
Ну, когда чего-то не знаешь, то и неудобно Ага

А если серьезно, то когда привык к чему-то одному, причем это было для тебя довольно удобным, ты автоматом потом ищешь что-то подобное.
Например для меня редактор ресурсов в 6-ой студии очень удобен, ибо нагляден - можно за пару секунд сразу увидеть все, что есть в проекте (диалоги, меню, тексты и т.д.) А тут этого нет - обидно  Жаль

Теперь насчет паники Ага:
1) я так и не поняла (точнее, еще не нашла), как можно для какого-то класса, который не является классом диалога, создать resx-файл, чтобы при выборе вида показа файлов "шощ алл филес" под этим классом появлялся соответствующий resx-файл.

2) насчет грида - я нашла сейчас хоть какую-то информацию о том, что надо сделать, чтобы показывать свойства в виде нужного мне текста, а не в виде имени перемменой, которая его описывает. Буду копать теперь дальше.

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

Записан

холоднокровней, Маня, Ви не на работе
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 17-04-2007 19:47 » 

По поводу Визарда и ресурса. У меня сейчас 2003 студии нет под рукой, увы. Стоит 2005. Вот что в ней есть. Справа Solution Explorer у тебя. Подозреваю, что у тебя там на великом и могучем немецком Улыбаюсь, но тут я бессилен Улыбаюсь. В этом Solution Explorer отображаются у тебя открытые проекты (или проект), а именно ссылки - References, файлы .cs и втом числе там должен быть файл типа Resource.resx (по умолчанию). Отмечу, что это я создал обычный проект Windows Application и по умолчанию у тебя должно быть приблизительно также. А теперь вот что я делаю (думается это может быть в 2003). Двойной клик по resource.resx. Появляется дополнительная вкладка с названием Resource.resx. И в ней то, что тебе нужно. А именно, ручками можешь добавлять ресурсы (т.е. не программным путем). Главное, это кликнуть на самом Resource.resx, а не на том, что содержится внутри этой ветви. Попробуй. Уж не верю я, что в 2003 так нельзя. 

По поводу Грида. Я с ним не работал (я вообще медленно изучаю все эти контролы, только чисто от безделья Улыбаюсь ), но думаю ты справишься, благо .НЕТ хорошо документирована. Сейчас попробую инфу поскрести.
И по поводу вот этого
Цитата
1) я так и не поняла (точнее, еще не нашла), как можно для какого-то класса, который не является классом диалога, создать resx-файл, чтобы при выборе вида показа файлов "шощ алл филес" под этим классом появлялся соответствующий resx-файл.
Я боюсь ошибиться, но вроде как мухи отдельно, котлеты отдельно. Ты создаешь файл ресурса (я это сделал нажатием правой кнопки мыши на имени проекта в Solution Explorer). А потмо в классе в котором тебе надо, ты его открываешь, и начинаешь работать с ним (читать значения или формировать новые). Я так понимаю это можно прямо в конструктор затолкать. Вроде бы все логично или я тебя не так понял? Признаться я не совсем понял вот это
Цитата
чтобы при выборе вида показа файлов "шощ алл филес" под этим классом появлялся соответствующий resx-файл.

Я увидел, что под формой появился файл ресурса, но не под именем класса. В Class View я так и не нашел в классе формы упоминание о ресурсе.
Записан

ещё один вопрос ...
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #5 : 18-04-2007 09:00 » 

nikedeforest,

слава богу, у меня на могучем английском, бо сама инсталлировала! Ага

Насчет ресурсов - обычный файл появляется без проблем, надо только понять, почему в этом проекте так странно внесены данные Ага (т.е. обычно ты вносишь строку с идентификатором и все. А тут - одна строка именно такого вида, т.е.
I_VLANPriority = "имя", а затем есть еще одна строка очень странного вида - I_VLANPriority.Description = "описание", т.е. почему подвешен описатель Description, я пока не знаю Ага Но надеюсь, что все тайное станет когда-то явным Ага )

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

Цитата
чтобы при выборе вида показа файлов "шощ алл филес" под этим классом появлялся соответствующий resx-файл.
Ой, пардон, я в транслите все набирала и не заметила, что он мне и это перевел Ага Имелось в виду "Show all files" Ага

Еще раз спасибочки за помощь!
Записан

холоднокровней, Маня, Ви не на работе
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 18-04-2007 14:36 » 

Что-то этот пост меня немного запутал. Смотря на это предложение
Цитата
А тут - одна строка именно такого вида, т.е.
I_VLANPriority = "имя", а затем есть еще одна строка очень странного вида - I_VLANPriority.Description = "описание", т.е. почему подвешен описатель Description, я пока не знаю  Но надеюсь, что все тайное станет когда-то явным  )

я понимаю, что ты не смогла повторить мой путь в 2003 студии по поводу Визарда по работе с ресурсами. Я прав?
Протос там как разм ты бы увидела, что при создании ресурса, к примеру строки, ты указываешь его имя, значение, и как раз описание - "Description". Описание это дано для удобства Улыбаюсь, чтобы не забыть, что за ресурс и для чего. Думается, что не зря. Улыбаюсь
Цитата
Насчет мух и котлет - я тоже до сих пор именно так и думала  Почему и опешила, когда увидела эту сюрреалистическую картинку  Пока для примера я просто создала обычный файл ресурса и он даже правильно считывает данные, а в проекте этот файл уже есть, так что это упрощает мою задачу. Но хотелось бы понять для себя самой, что это за зверь.

Вот это предложение меня запутало в корень. Если не затруднит, то может еще раз объяснишь в чем сейчас состоит трудность и проблема и как обстоят дела в целом. А то я что-то уже перестаю понимать в чем проблема вообще, только про грид понял Улыбаюсь.
Записан

ещё один вопрос ...
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #7 : 18-04-2007 16:31 » 

nikedeforest,

1) Прости, заразу, просто когда сама плохо понимаю, что к чему, то плохо обьясняю Ага. Суть вот в чем - если посмотреть в файл ресурсов, но в виде XML,
то там стоит вот что:

   <data name="I_VLANPriority">
      <value>VLAN Priority</value>
   </data>
   <data name="I_VLANPriority.Description">
      <value>Priority of telegrams.\n\n</value>
   </data>
Т.е. есть в реальности 1 переменная, но она имеет еще и атрибуты! Бррр... В любом случае обычная логика без знания предмета тут уже не спасает ;-(
Насколько я успела разобраться, это связано со спецификой этого самого грида.

2) Запутало меня именно то, что файл ресурсов в окошке "Solution explorer" подвешен не напрямую к папке проекта, а к конкретному классу, хотя он не является классом какой-то формы.
Все мои попытки это повторить успехом не увенчались. А я хотела понять, как это можно сделать (обычный путь добавления объектов в проект добавляет файл в каталаог проекта).
Я попробую спросить коллегу, который работал в этом проекте, как они до такого дожили Ага

3) на данный момент я ищу какие-то работающие примеры с кодом + объяснения по поводу этого ...грида. Самое простое я уже поняла, теперь надо разбираться с различными наворотами, коих там туева хуча...
Записан

холоднокровней, Маня, Ви не на работе
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 21-04-2007 13:10 » 

Цитата
2) Запутало меня именно то, что файл ресурсов в окошке "Solution explorer" подвешен не напрямую к папке проекта, а к конкретному классу, хотя он не является классом какой-то формы.
Все мои попытки это повторить успехом не увенчались. А я хотела понять, как это можно сделать (обычный путь добавления объектов в проект добавляет файл в каталаог проекта).
Я попробую спросить коллегу, который работал в этом проекте, как они до такого дожили 
Дело в том, что я об этом чуть выше писал
вот
Цитата
Я увидел, что под формой появился файл ресурса, но не под именем класса. В Class View я так и не нашел в классе формы упоминание о ресурсе. 
Т.е. я о том, что в Solution Explorer отображается проект и файлы, но не классы. А вот в Class View отображаются классы. Я там сколько искал какую-то завязку на ресурс, так и не нашел. Т.е. смысл-то получается такой, что привязки к классу-то нет. Скорее это только чисто эстетичесская фича, чтобы удобнее было в solution explorer лазить. Но я так понял, что тебе хочется заиметь такую фичу себе. Итак, вот что у меня получилось.
Лезешь в свойства ресурса и в свойстве build action выбираешь Embedded Resource. У меня не сразу получилось, мне пришлось удалить этот ресурс из проект и снова его добавить. Плюс еще такая тонкость, я файл ресурса назвал также как и файл, с которым я хотел объединить. В итоге получилось. Файл ресурса называется Program.resx. Внизу будет скриншот для убедительности. Но я еще раз повторюсь, в классе изменений никаких не произошло.
Попозже про грид чего-нибудь посмотрю

* For_Malaya.JPG (30.39 Кб - загружено 303 раз.)
Записан

ещё один вопрос ...
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #9 : 23-04-2007 08:48 » 

nikedeforest,

спасибочки!!! Получилось!!!  Внимание! Говорит и показывает...

Сразу говорю - мне стыдно, аж пятки красные!   Краснею У меня хватило ума сообразить, что имена файлов должны быть одинаковыми, насчет "Embedded Resource" тоже немного погодя дошло, но дальше все зависло - я пыталась файл ресурсов удалять и создавать по новой, посему эффект был нулевой. А попробовать просто отключить файл от проекта, а потом подключить по новой даже мысли не возникло! Короче, "позор Юрию Деточкину" Ага и пепел на мою седую и дурную голову! Ага  Отлично

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

Насчет грида могу сказать, что нашла пару более-менее удобоваримых статей - объяснений (до получения полной картины сотворения мира еще далеко, но хоть что-то стало понемногу проясняться Ага ). Вот те линки, которые я нашла:

1)odna I ta zhe stat’ja – na angl. I russkom:
http://msdn.microsoft.com/msdnmag/issues/05/04/NETMatters/default.aspx
http://www.codingclub.net/index.php?go=Articles&in=view&id=964

2)
http://www.codeguru.com/csharp/csharp/cs_controls/propertygrid/article.php/c4795/

http://www.codeproject.com/vb/net/using_propertygrid.asp
http://www.codeproject.com/cs/miscctrl/DataPropertyGrid.asp

Во всяком случае можно искать дальше, когда есть немного больше информации.

Еще раз огромное спасибо!
Записан

холоднокровней, Маня, Ви не на работе
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines