انتهاك الوصول عند تعيين خاصية مكون على وحدة البيانات

StackOverflow https://stackoverflow.com/questions/976159

  •  13-09-2019
  •  | 
  •  

سؤال

أنا على دلفي 2009، وكان تطبيقي يحتوي على وحدة بيانات، والتي تحتوي على مكون مخصص باسم "Globals" على ذلك.

في نموذج آخر في التطبيق، أحاول تغيير خاصية منشورة (سلسلة) في مكون Globals:

  dm.Globals.qhProject := _ProjectName.Text; //always gives access violation

عنصر التحكم _ProjectName هو سليل tlabelededit. أحصل دائما على انتهاك وصول هنا إذا كان هناك أي نص في المربع.

ومع ذلك، إذا كنت تؤدي يدويا سلسلة إلى الممتلكات، فلن أحصل على AV:

  dm.Globals.qhProject := 'some text'; //works

إليك إعلان الملكية QHProject:

FqhProject: string;    
property qhProject: string read FqhProject write FqhProject;

لا أستطيع معرفة سبب وجود AV هنا على الإطلاق. لقد حاولت نقل ترتيب إنشاء تلقائي لنمط النماذج / البيانات حولها، لكنني أحصل دائما على AV.

ماذا أفعل الخطأ هنا؟

تحديث:

أنا أستخدم تأثيرات Billenium TFormContainer للتبديل بين النماذج المختلفة في التطبيق. كلا النموذجين المشاركين هنا في حاوية النموذج. يحتوي نموذج واحد، TDLGSummary، على ما يلي:

procedure TdlgSummary.SyncVars;
begin
    dm.Globals.qhProject := _ProjectName.Text
end;

يحتوي النموذج الآخر، TDLGFinalize، على ما يلي:

dlgSummary.SyncVars;

إذا قمت بتشغيل المزامنة داخل dlgsummary، فإنه يعمل بشكل جيد. إذا اتصلت به من DLGFinalize، أحصل على AV. يبدو أن هذا هو جوهر المشكلة، لكنني لا أستطيع معرفة ما يحدث. حتى لو قمت بتشغيل التحكم في DLGFinalize، لم يتم تدمير DLGSummary، لأنني أستطيع العودة إليه. أيه أفكار؟

هل كانت مفيدة؟

المحلول

يبدو لي مثل _ProjectName هو نيل. وبعد حاول وضع نقطة توقف في هذا الخط وفحص _ProjectName، راجع ما إذا كان يعطي مرجع صالح أم لا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top