Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];

Вниз

Название ComboBox   Найти похожие ветки 

 
Eraser   (2002-01-17 13:39) [0]

В следующем коде при отладке ОК при работе - ошибка:
for i:=0 to componentCount-1 do
(Components[i] as TComboBox).Name:="cbCom"+inttostr(i);


 
MBo   (2002-01-17 13:42) [1]

Вставь
if (Components[i] is TComboBox) then ...


 
Digitman   (2002-01-17 13:42) [2]

вникай в сообщение об ошибке : какой-то объект из списка Components не является объектом класса TComboBox. При такой постановке проблемы это - однозначно


 
vlv   (2002-01-17 13:43) [3]

Забыл проверку:

for i:=0 to componentCount-1 do
if Components[i] is TComboBox then
(Components[i] as TComboBox).Name:="cbCom"+inttostr(i);


 
vlv   (2002-01-17 13:44) [4]

А еще: возможно ли изменять имя компонента, созданного не динамически?


 
Eraser   (2002-01-17 13:56) [5]

Ошибка осталась, та же самая . В принципе это было сделано для того чтобы менять номер КомбоБокса в следующем тексте:
Table1.FieldByName("ComPort").AsString:=cbCom<<номер>>.Text;
<<номер>> надо изменять чтобы писалось из разных Боксов в одну строку БД


 
Digitman   (2002-01-17 14:06) [6]

Правило : имя компонента (неважно как созданного - динам-ки или в design-time) должно быть либо пустой строкой либо уникальным в пределах владелька компонента.


 
Владислав   (2002-01-17 14:12) [7]

> Eraser © (17.01.02 13:56)

Ссылка на компонент и имя компонента - разные вещи. В первом случае это указатель на экземпляр компонента, во втором - строка.


 
Владислав   (2002-01-17 14:13) [8]

Опиши точнее, что ты хочешь получить?


 
Eraser   (2002-01-17 14:26) [9]

Есть 6 ComboBox cbPort1..cbPort6 чтобы не писать 6 раз
Table1.FieldByName("ComPort").AsString:=cbCom1.Text;
Table1.Next;
Table1.FieldByName("ComPort").AsString:=cbCom2.Text;
Table1.Next;
Table1.FieldByName("ComPort").AsString:=cbCom3.Text;
.....

можно написать через цикл

Table1.active:=true;
table1.First;
for RecNo:=1 to Table1.RecordCount do
begin
Table1.Edit;
Table1.FieldByName("ComPort").AsString:=cbCom<<номер Бокса>>. Text;
Table1.Post;
Table1.Next;
end;
Table1.active:=false;
end;



 
Владислав   (2002-01-17 14:30) [10]

Если имена компонентов такие же ("cbCom1".."cbCom7"), то можно использовать FindConpenent.

for RecNo:=1 to Table1.RecordCount do
begin
Table1.Edit;
Table1.FieldByName("ComPort").AsString:=FindComponent("cbCom"+IntToStr(<<номер Бокса>>).Text;
Table1.Post;
Table1.Next;
end;


 
Digitman   (2002-01-17 14:36) [11]

Можно использовать сч-к FOR-цикла для доступа к массиву ссылок на заранее созданные ComboBox"ы. Тогда ни именовать их ни искать потом по всей форме не нужно будет - вот они все, под рукой, обращайся к ним по индексу в массиве


 
Ally   (2002-01-17 14:41) [12]

Так ты напиши функцию:


function TForm1.GetCBText(No: Integer): string;
var
I: Integer;

begin
with Self do
for I := 0 to ComponentCount - 1 do
if (Components[I] is TComboBox) and ((Components[I] as TComboBox).Name = "cbCom"+IntToStr(No))
then begin
Result := (Components[I] as TComboBox).Text;
Break;
end;
end;


а потом свою строчку в цикле:

for RecNo:=1 to Table1.RecordCount do
...
Table1.FieldByName("ComPort").AsString := GetCBText(RecNo);
...
end;


 
Eraser   (2002-01-17 15:38) [13]

> to Владиславу
перед FindComponent надо указать класс компонента тогда все работает


 
Digitman   (2002-01-17 15:47) [14]

>Eraser © (17.01.02 15:38)
Неверно. Не класс, а объект, чей метод FindComponent() вызывается


 
Eraser   (2002-01-17 16:19) [15]

Вот пример с FindComponent из Delphi
with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
begin
Left := 10;
Top := i * 20;
Parent := self;
end;
я пишу по аналогии

Table1.FieldByName("ComPort").AsString:=TСomboBox(FindComponent("cbCom" + IntToStr(i))).text;

ОШИБКА при работе причем не сразу а через некоторое время


 
Digitman   (2002-01-17 16:24) [16]

ОШИБКА-то КАКАЯ ? Ты до сих пор вопрос этот игнорируешь.


 
McSimm   (2002-01-17 16:30) [17]

По-моему проблема все-таки с уникальностью имен. Возможно при в определенный момент при изменении имени, например на "cbCom1", такой уже существует.


 
Eraser   (2002-01-17 16:34) [18]

Извините каюсь был неправ:
Invalid class


 
Romkin   (2002-01-17 16:35) [19]

TComboBox - потомок TWinControl
Попробуй Application.ProcessMessages непосредственно перед присвоением нового имени


 
Digitman   (2002-01-17 16:58) [20]

>Eraser
Ну дык - о чем речь ! Тебе и говорят о том, что среди компонентов, класс каждого из которых ты в цикле без разбору пытаешься привести к типу TComboBox (с помощью AS), каким-то образом появляется объект, не являющийся потомком класса TComboBox (что-то другое : кнопка какая-нить или еще чего - мало ли ты там чего еще в динамике творишь с формой, мы же не знаем, полного кода твоего нет), что и портит всю идиллию "жутким" исключением Invalid class.
Заключи строчку, где происходит AS-приведение типа, в блок try..except, поставь туда брейкпойнт, поймай его и определись, на каком из компонентов, перечисляемых в цикле, происходит реальный "спотык" : его класс, имя и пр. Сразу станет ясно, кто виновник исключения. А уж дальше соображай сам, в какой момент времени и откуда он там взялся, если в списке, по-твоему, д.б. одни ComboBox"ы



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.004 c
1-8830
ТеньЛуны
2002-01-15 11:14
2002.02.04
Пару дней назад...


3-8799
otari
2002-01-06 23:15
2002.02.04
никто не знает INTERBASE?


1-8882
Лана Розанова
2002-01-16 15:13
2002.02.04
Chart и др.


1-8923
Valdemar
2002-01-16 12:36
2002.02.04
Как оставить приложение без окна выполнятся до окончания работы Windows?


1-8952
Alexsum
2002-01-18 15:34
2002.02.04
Версия файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский