日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

技术篇(3)--QPG界面分解方法介绍

發布時間:2023/12/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 技术篇(3)--QPG界面分解方法介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在實際開發中,我發現很多程序員花很多時間在界面處理上.并且界面之間的關系和控制邏輯可能工作量并不小.所以好些老手到后面就跑去做后臺服務,做通訊去了.
??? 界面布局和交互設計本身有很多的學問,或者有很多藝術,但是本文這里先不討論這個問題.
??? 在QPG團隊實踐中,我們把界面劃分成很多的UI_PART,這和ASP.NET2.0的WebPart可能有相同的地方.我們用這些簡單的PART進行接受輸入或者展示結果.這樣就可以比較方便的測試了.通常這些PART就是一些用戶控件,我們提供了IMainForm接口,使得UI的容器可以動態調入這些部件,哪怕程序已經運行,您也可以編寫一個PART,您只要把它放到bin\plugins目錄即可.
????有時部件可能要和容器通訊,看看下面的代碼您可能就會明白:
IMainForm?成員#region?IMainForm?成員

????????
public?string?CurUserID?{
????????????
get?{
????????????????
//?TODO:??添加?Form1.CurUserID?getter?實現
????????????????return?"admin";
????????????}

????????}


????????
public?object?getCookie(string?name)?{
????????????
//?TODO:??添加?Form1.getCookie?實現
????????????return?name;
????????}


????????
public?void?addCookie(string?name,?object?obj)?{
????????????
//?TODO:??添加?Form1.addCookie?實現
????????}


????????
public?QPG.UIP.Privilege?getPrivilegeByUser(string?uid,?string?cmdName)?{
????????????
//?TODO:??添加?Form1.getPrivilegeByUser?實現
????????????return??QPG.UIP.Privilege.Full;
????????}


????????
public?void?showStatus(string?msg)?{
????????????MessageBox.Show(msg);
????????}


????????
public?void?showHelp(string?help)?{
????????????
//?TODO:??添加?Form1.showHelp?實現
????????}


????????
public?void?showNotify(string?title,?string?msg)?{
????????????MessageBox.Show(msg);
????????}


????????
#endregion
要使用插件服務.您的代碼Form容器大致如下:
public?class?Form1?:?System.Windows.Forms.Form,IMainForm
????
{
????????
private?System.ComponentModel.IContainer?components;
????????
private?System.Windows.Forms.Panel?panel1;
????????
public?static?PluginService?Plugins=new?PluginService();
????????
private?QPG.UIP.Actions.ActionList?actionList1;
????????
private?QPG.UIP.Actions.Action?action1;
????????
private?QPG.UIP.Actions.Action?action2;
????
//
????protected?IPlugin?selectedPlugin;

????????
public?Form1()
????????
{
????????????
//
????????????
//?Windows?窗體設計器支持所必需的
????????????
//
????????????InitializeComponent();
????????????Plugins.MainForm
=this;
????????
????????????action1.Tag
="Demo.UIC.Plugin1";
????????????action2.Tag
="Demo.UIC.Plugin2";
????????????action1.Execute
+=new?EventHandler(runAction);
????????????action2.Execute
+=new?EventHandler(runAction);

????????
//????Tester?t=new?Tester();
????????
//????t.testParametersConfig();
????????}

????????
private?void?runAction(object?sender,?System.EventArgs?e)?{
????????????QPG.UIP.Actions.Action?a
=sender?as?QPG.UIP.Actions.Action;
????????
????????????
if(getPrivilegeByUser("admin",?a.Tag.ToString())==Privilege.None)?return;
????????
????????????selectedPlugin
=Plugins.FindPlugin(a.Tag.ToString()?);
????????????panel1.Controls.Clear();
????????????panel1.Controls.Add(selectedPlugin.MainInterface);
????????????selectedPlugin.MainInterface.Dock
=DockStyle.Fill;

????????}

插件的編寫就很簡單了,大致如下:
using?System;
using?QPG.UIP;

namespace?Demo.UIC
{
????
/**////?<summary>
????
///?Plugin2
????
///?</summary>

????public?class?Plugin1?:??BasePlugin??
????
{

????????
public?Plugin1():base()
????????
{
????????????
????????}


????????
protected?override?void?init()
????????
{
????????????
base.init();
????

????????????
this.myRequimentNo?=?"uca01";
????????????
????????????
this.myDescription="統計圖";
????????????
this.myAuthor="alex";
????????????????????
????????????????
????????
????????}

????????
????????????
????????
????????
public?override?void?Initialize()
????????
{
????????????
this.MainInterface=new?PlugUI1();
????????}

????????
????????
public?override?void?Dispose()
????????
{
????????????
//Put?any?cleanup?code?in?here?for?when?the?program?is?stopped
????????}


????}

}

using?System;
using?System.Collections;
using?System.ComponentModel;
using?System.Drawing;
using?System.Data;
using?System.Windows.Forms;
using?QPG.UIP;


namespace?Demo.UIC
{
????
/**////?<summary>
????
///?Summary?description?for?ctlMain.
????
///?</summary>

????public?class?PlugUI1?:?PluginBaseUI
????
{
????
????????
private?System.Windows.Forms.Label?label1;
????????
private?System.Windows.Forms.GroupBox?groupBox1;
????????
private?System.Windows.Forms.TextBox?txtFeedback;
????????
private?System.Windows.Forms.Button?button1;
????????
/**////?<summary>?
????????
///?Required?designer?variable.
????????
///?</summary>

????????private?System.ComponentModel.Container?components?=?null;

????????
public?PlugUI1()
????????
{
????????????
//?This?call?is?required?by?the?Windows.Forms?Form?Designer.
????????????InitializeComponent();

????????????
//?TODO:?Add?any?initialization?after?the?InitializeComponent?call

????????}


????????
/**////?<summary>?
????????
///?Clean?up?any?resources?being?used.
????????
///?</summary>

????????protected?override?void?Dispose(?bool?disposing?)
????????
{
????????????
if(?disposing?)
????????????
{
????????????????
if(components?!=?null)
????????????????
{
????????????????????components.Dispose();
????????????????}

????????????}

????????????
base.Dispose(?disposing?);
????????}


//

????????
private?void?button1_Click(object?sender,?System.EventArgs?e)?{
????????????
this.PluginHost.showStatus(txtFeedback.Text);
????????}


????????

????????
????}

}


?具體代碼可以參閱:下載開發演示文件

轉載于:https://www.cnblogs.com/QPG2006/archive/2005/10/07/249662.html

總結

以上是生活随笔為你收集整理的技术篇(3)--QPG界面分解方法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。