我没有找到更好的方法来改变wx.ComboBox()中的不同选择,而不是将旧的ComboBox与新的交换.有没有更好的办法?
Oerjan Pettersen
#!/usr/bin/python
#20_combobox.py
import wx
import wx.lib.inspection
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.p1 = wx.Panel(self)
lst = ['1','2','3']
self.st = wx.ComboBox(self.p1, -1, choices = lst, style=wx.TE_PROCESS_ENTER)
self.st.Bind(wx.EVT_COMBOBOX, self.text_return)
def text_return(self, event):
lst = ['3','4']
self.st = wx.ComboBox(self.p1, -1, choices = lst, style=wx.TE_PROCESS_ENTER)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, '20_combobox.py')
frame.Show()
self.SetTopWindow(frame)
return 1
if __name__ == "__main__":
app = MyApp(0)
# wx.lib.inspection.InspectionTool().Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud) 这些是等价的:
if (null==myobject)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
和
if (myobject==null)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
或者他们会产生不同的代码?
在我们的主数据输入屏幕上,我们在OnBeforePost事件中有一个OK/Cancel对话框.
Dataset.Cancel;
这意味着什么,回滚任何更改并将数据集置于浏览模式.
这对大多数客户来说都很好,但我们被问到是否可以更改为
如果他们想要取消,他们可以使用取消按钮.
查看源代码procedure TDataSet.Post;
看起来不可能以这种方式使用事件.
任何人都有任何想法可以这样做吗?
跟进:这就是我现在选择处理它的方式
case MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo, mbAbort], 0) of
mrYes: ;
mrNo: Dataset.Cancel;
mrAbort: Abort;
mrNone: Abort;
end;
Run Code Online (Sandbox Code Playgroud) 输入框:
answer:=Inputbox('a','b','c');
Run Code Online (Sandbox Code Playgroud)
工作得很好,但我正在寻找一个蒙面的,就像一个密码盒,你只看到小星星而不是键入的字符.
在销毁某些线程时,我遇到了有时遇到死锁的问题.我试图调试问题但是在IDE中调试时似乎永远不存在死锁,可能是因为IDE中事件的速度很慢.
问题:
主线程在应用程序启动时创建多个线程.线程始终处于活动状态并与主线程同步.没问题.当应用程序结束时,线程被销毁(mainform.onclose),如下所示:
thread1.terminate;
thread1.waitfor;
thread1.free;
Run Code Online (Sandbox Code Playgroud)
等等.
但有时其中一个线程(使用synchronize将一些字符串记录到备忘录中)将在关闭时锁定整个应用程序.我怀疑当我调用waitform并且harmaggeddon发生时线程正在同步,但这只是猜测,因为在调试时永远不会发生死锁(或者我从来没有能够重现它).有什么建议?
我可以使用Delphi中的内置方法处理大量数据(超过10 ^ 400)吗?
我想在后台运行一个线程,它将以给定的时间间隔检查与某个服务器的连接.例如每5秒.
我不知道这是否有一个好的"设计模式"?如果我记得正确的话,我已经读过一些在其执行方法中睡眠线程不好的地方.但我可能错了.
另外,我可以使用普通的TThread类或OTL线程库.
有任何想法吗?
谢谢.
是否可以将记录用作方法参数,并在不隐式声明所述记录的实例的情况下调用它?
我希望能够编写这样的代码.
type
TRRec = record
ident : string;
classtype : TClass;
end;
procedure Foo(AClasses : array of TRRec);
Run Code Online (Sandbox Code Playgroud)
然后调用这样的方法或类似的东西.
Foo([('Button1', TButton), ('Lable1', TLabel)]);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我仍然坚持使用Delphi 5.
是否可以将接口的方法作为参数传递?
我正在尝试这样的事情:
interface
type
TMoveProc = procedure of object;
// also tested with TMoveProc = procedure;
// procedure of interface is not working ;)
ISomeInterface = interface
procedure Pred;
procedure Next;
end;
TSomeObject = class(TObject)
public
procedure Move(MoveProc: TMoveProc);
end;
implementation
procedure TSomeObject.Move(MoveProc: TMoveProc);
begin
while True do
begin
// Some common code that works for both procedures
MoveProc;
// More code...
end;
end;
procedure Usage;
var
o: TSomeObject;
i: ISomeInterface;
begin
o := TSomeObject.Create;
i := GetSomeInterface;
o.Move(i.Next);
// …
Run Code Online (Sandbox Code Playgroud)