我想做一个类似ListView Items Editor那样的窗口,Node的CellText属性能动态修改并及时刷新,我选择的组件是TVirtualStringTree。
我的代码如下:
procedure TworkForm.editChange(Sender: TObject);
begin
if Assigned(currentNode) then
case (Sender as TRzEdit).Tag of
1:currentNode.name:=Trim(nameEdit.Text);//这里改变Node对应结构体值
2:currentNode.wbs:=Trim(numberEdit.Text);
3:currentNode.prevItem:=Trim(prevEdit.Text);
end; vst1.InvalidateToBottom(vst1.FocusedNode);//刷新节点
end;
当我在edit1中改变内容时,VST中Node的CellText看起来跟着改变了,不过新增的文本区无法用鼠标点击选中,删除文本的话在原来的文本区也能点击选中,感觉就是一个什么热区没有及时更新,你看在ListView Items Editor中更新celltext是,文本的底纹或者选中方框也是跟着改变的。请高手赐教啊。
我的代码如下:
procedure TworkForm.editChange(Sender: TObject);
begin
if Assigned(currentNode) then
case (Sender as TRzEdit).Tag of
1:currentNode.name:=Trim(nameEdit.Text);//这里改变Node对应结构体值
2:currentNode.wbs:=Trim(numberEdit.Text);
3:currentNode.prevItem:=Trim(prevEdit.Text);
end; vst1.InvalidateToBottom(vst1.FocusedNode);//刷新节点
end;
当我在edit1中改变内容时,VST中Node的CellText看起来跟着改变了,不过新增的文本区无法用鼠标点击选中,删除文本的话在原来的文本区也能点击选中,感觉就是一个什么热区没有及时更新,你看在ListView Items Editor中更新celltext是,文本的底纹或者选中方框也是跟着改变的。请高手赐教啊。
解决方案 »
- QuickReport 打印支票问题,请各位帮帮忙
- 如果这个问题没法解决,这个erp也将无法完成了
- 问题 有关rave,delphi自带的
- 如何在Delphi中调用SQL Server中的存储过程?
- 将TXT文本保存在数据库中??
- 有谁用delphi开发过浏览器的?急需交流!!!!!!!!!!!
- 听说midas要交什么费用,在服务器和 客户机器比较多的时候???
- 紧急求救:delphi中dbchar 做图表问题
- 怎么知道是那一个控件被选中啊???
- 如何在Windows2000/XP下取得系统BISO的信息?请高手进来解答。
- TreeView控件使用问题
- 1000元求DELPHI或C++BUILDER连接现在的GMAIL能验证通过或连接成功的代码。
________________________________________
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Grids, ExtCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
Nodes: TTreeNodes;
node: TTreeNode;
begin
TreeView1.Align := alLeft;
Nodes := TreeView1.Items;
node := Nodes.Add(nil, '一连长');
node := Nodes.AddChild(node, '一排长');
node := Nodes.AddChild(node, '一班长');
node := Nodes.AddChild(node, '战士1');
Nodes.Add(node, '战士2');
Nodes.Add(node, '战士3');
Nodes.Add(node, '战士4');
node := node.Parent;
Nodes.Add(node, '二班长');
Nodes.Add(node, '三班长');
node := node.Parent;
Nodes.Add(node, '二排长');
Nodes.Add(node, '三排长');
node := node.Parent;
Nodes.Add(node, '二连长');
Nodes.Add(node, '三连长');
end;{初始化}
procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Items.Clear;
FormCreate(nil);
TButton(Sender).Caption := '初始化';
end;{删除}
procedure TForm1.Button2Click(Sender: TObject);
var
node: TTreeNode;
begin
if not Boolean(TreeView1.Items) then Exit; {如果 TreeView1 无内容}
if TreeView1.SelectionCount = 0 then Exit; {如果无选择}
node := TreeView1.Selected;
node.Delete; TButton(Sender).Caption := '删除';
end;{删除它的所有下级}
procedure TForm1.Button3Click(Sender: TObject);
var
node: TTreeNode;
begin
if not Boolean(TreeView1.Items) then Exit;
if TreeView1.SelectionCount = 0 then Exit;
node := TreeView1.Selected;
if node.HasChildren then node.DeleteChildren
else ShowMessage(node.Text + ' 没有下级'); TButton(Sender).Caption := '删除下级';
end;{用 TTreeNodes 删除}
procedure TForm1.Button4Click(Sender: TObject);
var
node: TTreeNode;
begin
if not Boolean(TreeView1.Items) then Exit;
if TreeView1.SelectionCount = 0 then Exit;
node := TreeView1.Selected;
TreeView1.Items.Delete(node); TButton(Sender).Caption := '用 TTreeNodes 删除';
end;{插入, 只能通过 TTreeNodes}
procedure TForm1.Button5Click(Sender: TObject);
var
node: TTreeNode;
begin
if not Boolean(TreeView1.Items) then Exit;
if TreeView1.SelectionCount = 0 then Exit;
node := TreeView1.Selected;
TreeView1.Items.Insert(node, '新成员'); TButton(Sender).Caption := '插入';
end;end.
这个是万一的博客里面的相关文章,你可以看一下,可能对你有帮助的。
你用第三方控件实现的效果,用自带的控件也完全可以实现,任何第三方控件都是自带的基础上加工而来。delphi7的Addtional面板上的ValueListEditor可以用来设置某对象属性。