跨多种形式使用TList <tcust>

时间:2018-08-10 12:07:17

标签: delphi

我的情况如下:

我有三种形式A,B,C。形式A同时创建B和C。

我有一个在表单A上创建的自定义类型的TList,我想同时从表单B和C进行访问。

我的问题是,如何将该列表传递给表单B和C,以便他们可以直接访问它,而不是各自复制副本?

2 个答案:

答案 0 :(得分:0)

如果在uses子句中声明了表单B和C,则可以使用单元A模块中的元素(如果A uses B和C,则将其放在B的implementation部分中, C)

但是通常最好的解决方案是创建具有其他单元共享的常量和变量的新通用单元。

答案 1 :(得分:0)

首先在<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> function fetch() { setTimeout( function() { loadDoc(); fetch(); }, 100); } function loadDoc() { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myFunction(this); } }; xhttp.open("GET", "../clubs/club.xml", true); xhttp.send(); } $(function() { $("#formpost").submit(function(event) { event.preventDefault(); var form = $(this); var url = form.attr('action'); $.ajax({ type: "POST", url: url, data: form.serialize() // serializes the form's elements. }).done(function(data) { var msg = $(data).find('#msg').text(); }); }); }); function myFunction(xml) { var rowsArray =[] var i , j; var xmlDoc = xml.responseXML; var table=""; var x = xmlDoc.getElementsByTagName("messageset"); for (i = 0; i < x.length; i++) { var name = x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue; var time = x[i].getElementsByTagName("time")[0].childNodes[0].nodeValue; var row = "<div class=\"row\"><div class=\"b1\" ><img src=\"" + "../users/" + name +"/notification/profilepic.svg" + "\" width=\"30px\" height=\"30x\" alt=\"avatar\" style=\"border-radius: 45px;\" class=\"image\" ></div><div class=\"b2 msginname\" >" + x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue + "</div> <div class=\"cmoti \"><a href=\"online.php\">check motive</a></div><div class=\"msgoriginal\">" + x[i].getElementsByTagName("message")[0].childNodes[0].nodeValue + "</div></div>"; rowsArray.push(row) } table += rowsArray.reverse().join(''); document.getElementById("demo").innerHTML = table; document.getElementById("check").innerHTML = time ; } function myFun(){ $('#formpost').click(function(){ $('#formpost')[0].reset(); }); } </script> 部分下的FormA中声明您的列表:

Public

不要忘记在某个时候创建​​它。例如。在type TFormA = class(TForm) ... private { Private-Deklarationen } public { Public-Deklarationen } myList: TList<TCust>; end; 方法下:

FormCreate

如果您现在尝试从procedure TFormA.FormCreate(Sender: TObject); begin myList := TList<TCust>.Create(); end; 访问列表,则delphi会将其标记为错误:

FormB

现在只需尝试编译您的应用程序。 Delphi检测到您要访问另一个表单,并询问是否要将其添加到使用列表中:

  

表单“ FormB”引用了在单元“ Unit1”中声明的表单“ FormA”   不在您的使用清单中。您要添加吗?

单击是。现在,您可以像这样从formB访问列表:

procedure TFormB.Button1Click(Sender: TObject);
begin
  FormA.myList
end;

但是正如MBo已经提到的,对于要从不同单元访问的元素,最好使用通用的procedure TFormB.Button1Click(Sender: TObject); var cust: TCust; begin cust := TCust.Create; cust.foo := true; FormA.myList.Add(cust); end;