Главная страница
    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.005 c
3-8772
Andr
2002-01-05 19:06
2002.02.04
DBImage


3-8763
Pavel_s
2002-01-03 16:46
2002.02.04
Интеграция Interbase и NT !!!!!!!!!!


14-8982
Ивашка
2001-11-23 11:58
2002.02.04
как защитить авторские права программы


6-8963
Begemoth
2001-11-10 18:30
2002.02.04
Счетчик посещений Web-страницы


1-8811
Алиса
2002-01-18 16:59
2002.02.04
Excel+Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский