前天写了双击GRID然后弹出子窗口,可交互信息的内容
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:title="*" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
import mx.controls.Alert;
import flash.events.MouseEvent;
import mx.events.CloseEvent;
import mx.events.ListEvent;
import mx.collections.ArrayCollection;
import mx.managers.PopUpManager;
private var menuData:ArrayCollection= new ArrayCollection();
private var canvas:Sprite = new Sprite();
private var uiComponent:UIComponent;
/**
* 初始化蒙板等。
**/
private function init():void{
menuData=new ArrayCollection([
{no:"101",name:"菜单管理",address:"21",type:"branch"},
{no:"102",name:"查询测试",address:"22",type:"leaf"},
{no:"103",name:"更改",address:"23",type:"branch"}
]);
//初始化蒙板的颜色以及透明度
var g:Graphics = canvas.graphics;
g.beginFill(0x000000,0.3);
g.drawRect(0,0,this.width,this.height);
g.endFill();
menuDataGrid.addEventListener(ListEvent.ITEM_DOUBLE_CLICK, doubleClick);
this.menuDataGrid.dataProvider=menuData;
}
/**
* 删除操作, 通过提示是否删除,通过事件来捕捉用户的操作.
**/
private function doDel():void{
if(menuDataGrid.selectedItem == null){
Alert.show("请选择需要删除的菜单");
}else{
Alert.show("确定删除?", "删除", 3, this, delClickHandler);
}
}
/**
*如果确认了删除,则将menuData中的记录删除
**/
private function delClickHandler(event:CloseEvent):void {
if (event.detail==Alert.YES){
menuData.removeItemAt(menuDataGrid.selectedIndex);
}
}
/**
* 双击操作,双击目前为编辑数据
**/
private function doubleClick(event:ListEvent):void{
doEdit();
}
/**
* 编辑操作
**/
private function doEdit():void{
if(menuDataGrid.selectedItem == null){
Alert.show("请选择需要编辑的菜单");
}else{
uiComponent= new UIComponent();
uiComponent.addChild(canvas);
this.addChild(uiComponent);
var menuWindow:MenuTitleWindow = new MenuTitleWindow();
var obj:Object= {selectIndex:menuDataGrid.selectedIndex,no:menuDataGrid.selectedItem.no,name:menuDataGrid.selectedItem.name,address:menuDataGrid.selectedItem.address
,type:menuDataGrid.selectedItem.type};
if(menuDataGrid.selectedItem.type == "branch"){
obj.typeSelIndex=0;
}else{
obj.typeSelIndex=1;
}
obj.editDo= editMenuData;
obj.cancleDo=cancleEdit;
menuWindow.object = obj;
PopUpManager.addPopUp(menuWindow,this);
PopUpManager.centerPopUp(menuWindow);
}
}
/**
*增加操作
**/
private function doAdd():void{
if(uiComponent == null){
uiComponent = new UIComponent();
uiComponent.addChild(canvas)
}
this.addChild(uiComponent);
var menuWindow:MenuTitleWindow = new MenuTitleWindow();
var object:Object = {editDo:editMenuData,cancleDo:cancleEdit};
menuWindow.object= object;
PopUpManager.addPopUp(menuWindow,this);
PopUpManager.centerPopUp(menuWindow);
}
/**
* 此将函数作为一个变量传递给子窗口,并且在子窗口中调用
* 目前如果是编辑,则能够得到grid的selectIndex,且已经够selectIndex传入子窗口中.
* 可以将selectIndex是否存在作为判断是更改菜单还是增加菜单.
**/
private function editMenuData(menuTitle:MenuTitleWindow):void{
var object:Object = menuTitle.resultObject;
if(object.hasOwnProperty("selectIndex")){
menuData.removeItemAt(object.selectIndex);
menuData.addItemAt(object,object.selectIndex);
}else{
menuData.addItem(object);
}
this.menuDataGrid.dataProvider=menuData;
this.cancleEdit();
}
/**
*移去蒙板
**/
private function cancleEdit():void{
this.removeChild(uiComponent);
}
]]>
</mx:Script>
<mx:DataGrid id="menuDataGrid" includeInLayout="true" visible="true" width="100%" height="90%"
editable="false" y="34" doubleClickEnabled="true" >
<mx:columns>
<mx:DataGridColumn dataField="no" headerText="编号" />
<mx:DataGridColumn dataField="name" headerText="名称"/>
<mx:DataGridColumn dataField="address" headerText="地址"/>
<mx:DataGridColumn dataField="type" headerText="类型" />
</mx:columns>
</mx:DataGrid>
<mx:Button id= "delButton" label="删除菜单" click="doDel()" x="10" y="10"/>
<mx:Button id= "editButton" label="编辑菜单" click="doEdit()" x="126" y="10"/>
<mx:Button id= "addButton" label="增加菜单" click="doAdd()" x="230" y="10"/>
</mx:Application>
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300" title="菜单" showCloseButton="false" alpha="1.0" fontFamily="Times New Roman" fontSize="12">
<mx:Script>
<![CDATA[
import mx.managers.FocusManager;
import mx.managers.PopUpManager;
import mx.collections.ArrayCollection;
[Bindable]
public var object:Object;
public var resultObject:Object;
private var saveData:Function;
private var cancleEdit:Function;
[Bindable]
public var types:ArrayCollection = new ArrayCollection(
[ {label:"branch", data:1},
{label:"leaf", data:2}]);
/**
* 弹出菜单保存以后,保存数据,主菜单中的保存方法是变量形式传递进来
* saveData对应的是 menu.mxml中的editMenuData(menuTitle:MenuTitleWindow).
* 将MenuTitleWindow.mxml作为参数传递回去,操作菜单中的结果集.
**/
private function doSave():void{
saveData = object.editDo;
if(object.hasOwnProperty("selectIndex")){
resultObject={no:this.no.text,name:this.menuName.text,
address:this.address.text,type: this.typeCombo.selectedItem.label,
selectIndex:object.selectIndex} ;
}else{
resultObject={no:this.no.text,name:this.menuName.text,
address:this.address.text,type: this.typeCombo.selectedItem.label};
}
this.saveData(this);
PopUpManager.removePopUp(this);
}
private function doCancle():void{
cancleEdit = object.cancleDo;
PopUpManager.removePopUp(this);
this.cancleEdit();
}
]]>
</mx:Script>
<mx:HBox width="100%" y="40">
<mx:Label text="No:" width="65" textAlign="left"/>
<mx:TextInput id="no" text="{object.no}" width="100%" textAlign="left"/>
</mx:HBox>
<mx:HBox width="100%" y="161">
<mx:Label text="菜单名称:" width="65"/>
<mx:TextInput id="menuName" text="{object.name}" width="100%" textAlign="left" />
</mx:HBox>
<mx:HBox width="100%" y="68">
<mx:Label text="地址:" width="65"/>
<mx:TextInput id="address" text="{object.address}" width="100%" textAlign="left"/>
</mx:HBox>
<mx:HBox width="100%" y="112">
<mx:Label text="类型:" width="65"/>
<mx:ComboBox id = "typeCombo" dataProvider="{types}" selectedIndex="{object.typeSelIndex}">
</mx:ComboBox>
</mx:HBox>
<mx:Button label="保存" click="doSave()" x="118" y="228"/>
<mx:Button label="关闭" click="doCancle()" x="201" y="228"/>
</mx:TitleWindow >
分享到:
相关推荐
本文将深入探讨如何实现一个主窗口中嵌入子界面的效果,类似于C#中的TabControl控件,但无需实际使用TabControl。我们将讨论如何通过ContentControl、Frame和Page组件来实现这一目标。 首先,让我们理解核心组件的...
子`Grid`的配置应包括列定义、数据源以及可能的交互功能。这些子`Grid`通常在父`Grid`的行展开事件中动态生成。 3. 绑定子`Grid`:将子`Grid`绑定到父`Grid`的特定行。这通常通过在父`Grid`的行数据加载事件中完成...
在Windows Presentation Foundation (WPF) 中,开发人员可以创建丰富的用户界面,相比Windows Forms ...通过研究这些文件,你可以更好地理解如何在WPF中实现子窗口功能,以及如何与WinForms中的子窗口行为相匹配。
7. **事件和通信**:最后,为了使子窗口能够与主窗口或其他子窗口通信,可以使用依赖属性、事件或消息传递机制,如MVVM模式中的ViewModel或使用Dispatcher或EventAggregator。 综上所述,虽然WPF并不直接支持MDI,...
结合这两种技术,开发者可以在WPF应用中构建复杂的用户界面,例如,在主窗口中嵌入网页,同时使用子窗体来提供额外的功能或交互。`WebBrowser` 控件允许用户与网页互动,而子窗体则可以用来显示详细信息、进行设置或...
7. **事件处理和通信**:嵌入子窗口后,需要处理子窗口与主窗口之间的交互,如传递数据、响应事件等。C#提供了丰富的事件模型,可以利用事件委托和事件处理方法进行通信。 8. **自定义动画和过渡效果**:为了提升...
为了实现WPF MDI,我们通常会使用一个容器控件,如Grid或Canvas,作为“父窗口”,并在其中添加和管理子窗口。这些子窗口通常是UserControl,它们可以像任何其他WPF元素一样被添加、移动和删除。以下是一个基本步骤...
5. **子窗口的布局**:`MDIContainer`提供了多种布局策略,如“自由”(free)布局允许子窗口任意摆放,而“网格”(grid)布局则会将子窗口按网格排列。 6. **子窗口的事件处理**:监听子窗口的`mdiActivate`、`...
在编程中,停靠窗口通常与框架窗口(Frame Window)结合使用,使得子窗口可以停靠在框架窗口的边缘或者自由浮动。这种功能在许多IDE(集成开发环境)、文本编辑器以及各种复杂应用软件中非常常见,因为它提供了用户...
开发者可能使用Grid或其他布局控件,并通过自定义逻辑来处理子窗口的添加、删除、位置和大小调整。 2. **子窗口控件**:每个子窗口是一个独立的用户控件,可能包含了特定的功能或数据显示。它们需要实现拖放和缩放...
在子窗口中,如果需要关闭自身并返回主窗口,可以使用`Close`方法: ```csharp private void Button_Click(object sender, RoutedEventArgs e) { // 关闭子窗口,返回主窗口 Close(); } ``` 在父窗口中,如果...
在Delphi编程环境中,我们经常会遇到需要与外部应用程序交互的情况,比如获取其他软件中的数据,特别是当这些数据展示在Grid控件中时。本篇将详细介绍如何利用Delphi的低级API函数和句柄机制来捕获并处理列表框...
将WebBrowser控件与MDI结合使用,可以创建出能够在一个主窗口内展示多个网页的WPF应用。 **WebBrowser控件** WebBrowser控件是WPF中提供的一种与Internet Explorer浏览器引擎集成的控件。它不仅能够加载和显示HTML...
6. **Toplevel Windows**:除了主窗口外,还可以创建额外的顶级窗口,常用于对话框或子窗口。 7. **Images and Fonts**:Tkinter支持显示图像,并可以自定义字体和颜色,增强界面美观度。 在学习Tkinter时,你需要...
为了实现"如果准备打开的子窗口在主界面中没有则打开,有则激活到当前页"的功能,你需要跟踪已有的`TabItem`并检查它们是否与即将打开的子窗口对应。这可以通过使用数据绑定和MVVM(Model-View-ViewModel)模式来...
Popup窗口在Windows应用程序中非常常见,它是一种非模态对话框,可以在主窗口之上显示信息,并且不会阻塞用户的其他操作。在C#中,可以使用System.Windows.Controls.Popup类来创建Popup窗口。Popup控件允许我们...
6. **布局管理**:Popup窗口的位置需要根据主窗口或其他元素动态调整,这涉及到WPF的布局系统,如Canvas、Grid或StackPanel等布局容器的使用。 7. **测试和调试**:为了确保Popup窗口的功能和外观满足需求,源码中...
本篇我们将深入探讨如何使用Function来实现ALV Table的弹出窗口形式,这对于创建用户友好的交互式报告至关重要。 在SAP系统中,Function模块通常用于执行特定任务,它们可以作为程序之间的接口,也可以被GUI ...
然而,这种方式并不适用于ExtJS,因为ExtJS通常使用子窗口来展示详细信息,而子窗口的数据来源于主窗口的grid中的记录。在新增数据后,直接从更新后的列表中读取最新一条记录传递给详细页面更为合适。 方案2是成功...
6. **前端路由**:如果每个窗口对应一个独立的子应用,可能需要使用前端路由技术(如React Router或Vue Router)来管理不同窗口间的导航。 7. **状态管理**:当有多个iframe需要共享数据时,可以使用如Vuex或Redux...