我的情况如下:
我有三种形式A,B,C。形式A同时创建B和C。
我有一个在表单A上创建的自定义类型的TList,我想同时从表单B和C进行访问。
我的问题是,如何将该列表传递给表单B和C,以便他们可以直接访问它,而不是各自复制副本?
答案 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;
。