:: Visual Foxpro, Foxpro for DOS
ComboBox
Don_Alehandro

Сообщений: 44
Дата регистрации: 12.03.2009
Вопрос такой. Имеем форму с гридом. С грида выбирается строка и открывается запись на редактировании форме. На форме есть ComboBox к которой привязана таблица-справочник. Как сделать чтобы при открытии этой формы в комбобоксе отображалось значение, равное значению в редактируемой записи? Игрался со свойством Value и что то не получилось
Ratings: 0 negative/0 positive
Re: ComboBox
Александр Жевелев

Сообщений: 2723
Откуда: Новосибирск
Дата регистрации: 09.10.2003
если данное в редактируемой записи есть в справочнике, то с Value все работает, иначе в Combo будет пусто
Ratings: 0 negative/0 positive
Re: ComboBox
Don_Alehandro

Сообщений: 44
Дата регистрации: 12.03.2009
Запись в справочнике есть. Но... Пусто! Уже перед загрузкой формы вставляю scatter memvar, в value combobox соответственно имя переменной нужной. Пусто. Хотя значение в переменной есть. Ерунда какая-то
Ratings: 0 negative/0 positive
Re: ComboBox
MichaelD

Сообщений: 7578
Дата регистрации: 14.05.2005
Don_Alehandro
Как сделать чтобы при открытии этой формы в комбобоксе отображалось значение, равное значению в редактируемой записи?

Если устранить всякие "если" (т.е. даже при "отвязанном от источников ComboBox"), то "железный способ", это:

- в коде Form.Init() переребирая ComboBox.List(...) найти там требуемое значение кода/записи
- и именно для этого элемента, установить значение в ComboBox.ListIndex...


------------------
С уважением,
Михаил Дроздов, Пермь, Россия




Исправлено 1 раз(а). Последнее : MichaelD, 18.06.09 06:48
Ratings: 0 negative/0 positive
Re: ComboBox
Don_Alehandro

Сообщений: 44
Дата регистрации: 12.03.2009
немного не понял как это реализовать.
Ratings: 0 negative/0 positive
Re: ComboBox
rhs72
Автор

Сообщений: 1934
Откуда: Алматы - Чарджоу
Дата регистрации: 21.03.2007
На примере заполнения комбо установленными принтерами и установкой текущего по умолчанию принтера выбранным.


Local lnKolPrn,lnCurPrn
IF PEMSTATUS(thisform,"Prns",5)=.F.
thisform.AddProperty("Prns(1,1)") && создаем св-во формы тип- массив. Это используется и
&& в других контролах. Создаем в ините формы
ENDIF
&& Инит класса с комбо. Заполняем комбобокс
m.lnKolPrn=Aprinters(Thisform.Prns)
If m.lnKolPrn>0
For i=1 To m.lnKolPrn
Thisform.Prns(i,1)= "___"+ALLTRIM(Thisform.Prns(i,1))
Endfor
This.cmbPrinters.RowSourceType= 5
This.cmbPrinters.RowSource="thisform.Prns"
&& Вычисляем дефолтный принтер системы
Declare Integer GetDefaultPrinter In winspool.drv;
STRING @ pszBuffer,;
INTEGER @ pcchBuffer
lnBufsize = 250
lcPrinter = Replicate(Chr(0), lnBufsize)
= GetDefaultPrinter(@lcPrinter, @lnBufsize)
lcPrinter = Alltrim(Substr(lcPrinter, 1, At(Chr(0),lcPrinter)-1))
m.lcPrinter ="___"+m.lcPrinter
&& Находим индекс дефолтного принтера в системе
m.lnCurPrinter=Ascan(Thisform.Prns,m.lcPrinter,1,m.lnKolPrn,1,8)
&& Устанавливаем его текущим в Value комбобокса
If m.lnCurPrinter>0
This.cmbPrinters.Value=Thisform.Prns(m.lnCurPrinter,1)
Endif
Endif


------------------
"Знание того, что считать ответом, равносильно знанию ответа".
Ratings: 0 negative/0 positive
Re: ComboBox
Don_Alehandro

Сообщений: 44
Дата регистрации: 12.03.2009
Спасибо. Прописал в Init и все получилось.
Ratings: 0 negative/0 positive
Re: ComboBox
MichaelD

Сообщений: 7578
Дата регистрации: 14.05.2005
Александр Жевелев
если данное в редактируемой записи есть в справочнике, то с Value все работает, иначе в Combo будет пусто

Также, Вот код в подтверждение этого факта:

CLOSE DATABASES ALL
PUBLIC goFrm as Form
goFrm = CREATEOBJECT('form1')
IF VARTYPE(goFrm) # "O"
RELEASE goFrm
RETURN .F.
ENDIF
goFrm.Show()
DEFINE CLASS form1 AS form
Caption = "Form1"
Name = "Form1"
ADD OBJECT combo1 AS combobox WITH ;
ColumnCount = 2, ;
ColumnWidths = "87,50", ;
RowSourceType = 6, ;
RowSource = "region.regiondescription,regionid", ;
FirstElement = 1, ;
Height = 24, ;
Left = 12, ;
NumberOfElements = 0, ;
Style = 2, ;
Top = 12, ;
Width = 121, ;
Name = "Combo1"
PROCEDURE Load
IF !USED('region')
USE (HOME(2)+ "northwind\region.dbf") IN 0 SHARED
IF !USED('region')
RETURN .F.
ENDIF
ENDIF
ENDPROC
PROCEDURE Init
*!* IF ThisForm.Combo1.ListIndex = 0 && uncomment this lines to set initial item
*!* ThisForm.Combo1.Value = 3
*!* ENDIF
ENDPROC
PROCEDURE Unload
RELEASE goFrm
CLOSE DATABASES ALL
ENDPROC
ENDDEFINE


------------------
С уважением,
Михаил Дроздов, Пермь, Россия
Ratings: 0 negative/0 positive
Re: ComboBox
Deucalion

Сообщений: 27
Дата регистрации: 16.06.2009
Ну и ваяют же люди сложные вещи.
А вот у меня простые не получаются.

Устанавливаю в форме для ComboBox:
RowSourceType - значение 2
RowSource - псевдоимя таблицы
И все работает.
НО!
ЕСЛИ ВЫХОЖУ ИЗ FOXPRO И ЗАХОЖУ СНОВА, ТО ПРИ ЗАГРУЗКЕ ТОЙ ЖЕ ФОРМЫ ВЫДАЕТ СЛЕДУЮЩУЮ ОШИБКУ:

'field' phrase is not found.

Помогите пожалуйста!



Исправлено 1 раз(а). Последнее : Deucalion, 18.06.09 11:00
Ratings: 0 negative/0 positive
Re: ComboBox
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Нажмите "показать справку" при возникновении ошибки. И думайте


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.




Исправлено 1 раз(а). Последнее : Влад Колосов, 18.06.09 12:31
Ratings: 0 negative/0 positive
Re: ComboBox
Deucalion

Сообщений: 27
Дата регистрации: 16.06.2009
Влад Колосов
Нажмите "показать справку" при возникновении ошибки. И думайте

Нажимал, читал, думал, испробовал все что только на ум пришло, в том числе и вариант с RowSourceType - значение 6 (Fields).

Справка показала следующее:
Эта ошибка может произойти в следующих случаях:
1) Опция PROMPT field (определение меню) в команде ссылается на неизвестное поле или указанное поле не найдено.
2)Указано ошибочное значение для свойства RowSource объектов ComboBox или ListBox.

Вот я и подумал, что если бы указывал ошибочное значение для свойства RowSource, то ничего бы не срабатывало вообще. А так все срабатывает без проблем, проблемы начинаются после выхода из FoxPro и последующем повторном заходе.



Исправлено 1 раз(а). Последнее : Deucalion, 18.06.09 12:58
Ratings: 0 negative/0 positive
Re: ComboBox
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Deucalion
Вот я и подумал, что если бы указывал ошибочное значение для свойства RowSource, то ничего бы не срабатывало вообще. А так все срабатывает без проблем, проблемы начинаются после выхода из FoxPro и последующем повторном заходе.
И все это не наводит на мысль, что срабатывает правильно при определнных условиях? Которые ты сам настраиваешь? И которые сбрасываются при выходе из фокса? И что надо искать эти самые условия?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: ComboBox
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
Don_Alehandro
Вопрос такой. Имеем форму с гридом. С грида выбирается строка и открывается запись на редактировании форме. На форме есть ComboBox к которой привязана таблица-справочник. Как сделать чтобы при открытии этой формы в комбобоксе отображалось значение, равное значению в редактируемой записи? Игрался со свойством Value и что то не получилось
Нужно установить источник значений контрола (ControlSource), например
.ControlSource = "mytable.field1"



Исправлено 1 раз(а). Последнее : Prudivus, 18.06.09 13:23
Ratings: 0 negative/0 positive
Re: ComboBox
Deucalion

Сообщений: 27
Дата регистрации: 16.06.2009
ssa
Deucalion
Вот я и подумал, что если бы указывал ошибочное значение для свойства RowSource, то ничего бы не срабатывало вообще. А так все срабатывает без проблем, проблемы начинаются после выхода из FoxPro и последующем повторном заходе.
И все это не наводит на мысль, что срабатывает правильно при определнных условиях? Которые ты сам настраиваешь? И которые сбрасываются при выходе из фокса? И что надо искать эти самые условия?

Конечно наводит!
Только я не знаю какие это могут быть условия.

Давайте так, вы мне говорите что это за условия, а я найду как их настроить. Идет?
Ratings: 0 negative/0 positive
Re: ComboBox
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Может быть не сушествует открытой таблицы с нужным названием поля в момент инициализации элемента управления?


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: ComboBox
Deucalion

Сообщений: 27
Дата регистрации: 16.06.2009
Влад Колосов
Может быть не сушествует открытой таблицы с нужным названием поля в момент инициализации элемента управления?

ОТКРЫТОЙ?

Я загружаю соответствующий Project, в окне All (Forms)выбираю соответствующую форму и нажимаю на кнопку Run (то что справа). В окне All (Tables) таблица, на которую ссылается Combo посредством RowSource, присутствует. Ее надо каким-то особым образо открыть?

Что примечательно, если удаляю параметры записанные в RowSource и RowSourceType, а затем записываю их снова, то ничего не срабатывает. А если переименовываю таблицу на которую ссылается RowSource и соответственно параматр записанный в RowSource, то все срабатывает без проблем... до следующей загрузки FoxPro и данного проекта.

Кароче белиберда какая-то.

Какие всетаки будут идеи?
Ratings: 0 negative/0 positive
Re: ComboBox
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Deucalion
Влад Колосов
Может быть не сушествует открытой таблицы с нужным названием поля в момент инициализации элемента управления?

ОТКРЫТОЙ?

Я загружаю соответствующий Project, в окне All (Forms)выбираю соответствующую форму и нажимаю на кнопку Run (то что справа). В окне All (Tables) таблица, на которую ссылается Combo посредством RowSource, присутствует. Ее надо каким-то особым образо открыть?
Как это ни странно кому-то покажется, но все таки да. Проект - это всего лишь список файлов для сборки exe/app/dll, а не средство настройки фокса. И потому наличие файла в списке проекта ни на что другое, кроме сборки окончательного файла, не влияет.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: ComboBox
rhs72
Автор

Сообщений: 1934
Откуда: Алматы - Чарджоу
Дата регистрации: 21.03.2007
Идея одна :
Сходить по этой ссылке и поситать все статьи, которые начинаются "Советы начинающим..", желательно с первой статьи к пятой.
www.foxclub.ru


------------------
"Знание того, что считать ответом, равносильно знанию ответа".
Ratings: 0 negative/0 positive
Re: ComboBox
Deucalion

Сообщений: 27
Дата регистрации: 16.06.2009
rhs72
Идея одна :
Сходить по этой ссылке и поситать все статьи, которые начинаются "Советы начинающим..", желательно с первой статьи к пятой.
www.foxclub.ru

А я там уже был, посмотрим еще раз.
Ratings: 0 negative/0 positive
Re: ComboBox
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Таблицы открывает или программист или DataEnvironment формы. Сами по себе они не открываются.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 (Гостей: 22)

© 2000-2024 Fox Club 
Яндекс.Метрика