2013-11-29 2 views
1

Я просто пытаюсь сделать новую процедуру, поэтому мне не нужно ее перезаписывать снова. Мне очень жаль, что я новичок в delphi. я просто хочу сделать простой код при записи dnname.text, но я не хочу писать его в каждом случае.изменить текстовое поле с процедурой на Delphi

как этот

procedure link ; 
    var 
    dbnam : string; 
    form : Tform1; 

    begin 
    dbnam := 'squire'; 
    form.dnname.text := dbnam; 

    end; 

    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
    link; 
    end; 
    procedure Tmain.activate(Sender: TObject); 
    begin 
    link; 
    end; 

    procedure Tmain.datachange(Sender: TObject; Field: TField); 
    begin 
    link; 
    end; 

, но я получил ошибку на 0074A43C6 из Form1.

+0

ли ошибка «Нарушение прав доступа по адресу 0074a43c6»? Укажите точное сообщение об ошибке. – dummzeuch

ответ

1

Локальная переменная form здесь не инициализирована, поэтому происходит нарушение доступа.

Вы бы превратили эту процедуру в метод TForm - чтобы свободно использовать компоненты формы?

+0

если преобразовать в метод Tform, я думаю, его то же самое, если я напишу dnname.text = 'squire'; in Tform1.button1lick – Chino

+0

Покажите нам настоящий код, пожалуйста. Код "Edit1.text: = 'Test'" работает для меня, конечно – MBo

2

Переменной декларация

var 
    form : TForm1 

только сообщает компилятор, который типа (TForm1) переменный имеет, но должен быть использован не какой экземпляр этой формы (там может быть много форм типа TForm1 реализованным) , В Delphi вы должны всегда инициализировать локальные переменные перед их использованием.

У вас есть несколько вариантов:

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

  • Реализация функции полезности как метода класса TForm1. В этом случае вы можете ссылаться на экземпляр формы неявно или использовать Self.

  • Передайте экземпляр формы как параметр функции полезности.

2

по умолчанию, Delphi генерируется код новой формы будет выглядеть примерно так:

type 
    TForm1 = class(TForm) 
    { lots of stuff } 
    end 

Это описывает то, что «TForm1» выглядит, но не создает «экземпляр» одного.

(подумайте о «экземпляре» как НЛО: просто потому, что вы сказали мне, что НЛО выглядело не означает, что - это НЛО. Вы должны создать для меня, чтобы вы думали, что вы не сумасшедший)

Вы также увидите что-то вроде следующего в том же файле:

var 
    Form1: TForm1; 

Это выделяет некоторые memroy для хранения instanance из TForm1, но, также, не создает один.

В файле .dpr вы можете увидеть что-то вроде этого:

Application.CreateForm(TForm1, Form1); 

, который создает и экземпляр TForm1 и сохраняет его в переменной Form1.

Вы также можете сделать подобную вещь вручную:

Form1 := TForm1.Create(nil) 

Это также создает экземпляр TForm1 и сохраняет его в переменной Form1.

Ваш (несколько упрощенно) поставляется код, выглядит следующим образом:

procedure link; 
var 
    form1: TForm1: 
begin 
    form1.dnname.text := 'squire'; 
end; 

В контексте процедуры «ссылка», «Form1» не было присвоено значение, поэтому он будет содержать случайное значение (это не совсем так, но сейчас будет всплывать)

Вам либо нужно присвоить значение «form1» (действительное), либо убедиться, что «form1» уже ссылается на допустимое значение.

Следующая может работать для вас:

procedure link; 
begin 
    form1.dnname.text := 'squire'; 
end; 

Но пожалуйста, пожалуйста, найдите время, чтобы понять, что происходит.

Будет светлый момент.

И я могу заверить вас, что каждый супер-карма переполнение стека плакат был тот лампочку момент для themselfs ...

Смежные вопросы