Commit fb3751ef authored by tr's avatar tr

1、审批样例程序

parent a53d5ff3
namespace Tools.MyCommon.controls
{
partial class ucAudit
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.panelAuditHome = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// panelAuditHome
//
this.panelAuditHome.AutoScroll = true;
this.panelAuditHome.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelAuditHome.Location = new System.Drawing.Point(0, 0);
this.panelAuditHome.Name = "panelAuditHome";
this.panelAuditHome.Size = new System.Drawing.Size(346, 312);
this.panelAuditHome.TabIndex = 0;
//
// ucAudit
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.panelAuditHome);
this.Name = "ucAudit";
this.Size = new System.Drawing.Size(346, 312);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panelAuditHome;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Tools.MyCommon.controls
{
public partial class ucAudit : UserControl
{
public ucAudit()
{
InitializeComponent();
}
private DataTable _dt = null;
/// <summary>
/// 数据源
/// </summary>
public DataTable DataSource
{
get
{
return this._dt;
}
set
{
this._dt = value;
if (this._dt != null)
{
this.InitAuditView();
this.InitAuditActived();
}
}
}
/// <summary>
/// 刷新节点状态
/// </summary>
public void RefreshNode()
{
this.SetAuditActived();
}
List<ucAuditNode> auditNodeList = null;
int previous = -1; //前一节点
int current = 0; //当前节点
bool isIniting = false;
private void InitAuditView()
{
if (this.isIniting)
return;
try
{
this.isIniting = true;
//清除控件
this.panelAuditHome.Controls.Clear();
//初始化审批节点列表
auditNodeList = new List<ucAuditNode>();
int index = 0;
foreach (DataRow dr in this.DataSource.Rows)
{
ucAuditNode node = new ucAuditNode();
node.DataSource = dr;
node.Index = index;
node.AuditStateChanged += Audit_AuditStateChanged;
node.Location = new Point(0, index * 155);
node.Parent = this.panelAuditHome;
auditNodeList.Add(node);
index++;
}
}
catch (Exception ex)
{
MyUtils.Utils.Tip(ex.Message);
}
finally
{
this.isIniting = false;
}
}
private void InitAuditActived()
{
int index = 0;
int total = this.auditNodeList.Count;
while (index < total && this.auditNodeList[index].AuditState != 0)
{
index++;
}
this.current = index >= total ? total - 1 : index;
this.previous = this.current - 1;
this.SetAuditActived();
}
private void SetAuditActived()
{
if (auditNodeList == null || auditNodeList.Count == 0)
return;
if (previous < 0) //到达边界时,分别处理
{
this.SetAuditActived(current, true);
}
else
{
this.SetAuditActived(previous, auditNodeList[current].AuditState == 0); //下一节点待审核时,当前节点有效,即可以撤销
this.SetAuditActived(current, auditNodeList[previous].AuditState == 1); //上一节点审核通过后,当前节点有效,即可以审批
}
}
private void SetAuditActived(int index, bool IsActive)
{
if (auditNodeList == null || auditNodeList.Count == 0)
return;
if (index >= 0 && index < auditNodeList.Count)
{
auditNodeList[index].IsActive = IsActive;
}
}
private void Audit_AuditStateChanged(object sender, EventArgs e)
{
ucAuditNode node = sender as ucAuditNode;
//向下偏移是正常方向
bool IsDown = node.Index == current;
//上下偏移时,修改前序节点状态
int disposal = IsDown ? previous : current;
this.SetAuditActived(disposal, false);
//移动当前指针位置
current += IsDown && current < auditNodeList.Count - 1 ? 1 : 0; //向下
current += !IsDown && current > 0 ? -1 : 0; //向上
previous = current - 1; //前序指针永远等于:current-1
//激活当前节点和前序节点
this.SetAuditActived();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file
This diff is collapsed.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Tools.MyUtils;
namespace Tools.MyCommon.controls
{
public partial class ucAuditNode : UserControl
{
public event EventHandler AuditStateChanged;
public ucAuditNode()
{
InitializeComponent();
}
/// <summary>
/// 数据源
/// </summary>
public DataRow DataSource { get; set; } = null;
/// <summary>
/// (私有)是否激活
/// </summary>
private bool _actived = false;
/// <summary>
/// 是否激活
/// </summary>
public bool IsActive
{
get
{
return this._actived;
}
set
{
this._actived = value;
this.SetEnabled();
}
}
/// <summary>
/// 序号
/// </summary>
public int Index { get; set; }
/// <summary>
/// 审批状态
/// </summary>
public int AuditState => this.DataSource == null ? 0 : Convert.ToInt32(this.DataSource["AuditState"].ToString());
/// <summary>
/// 是否待审
/// </summary>
private bool IsWaitAudit => this.AuditState == 0;
/// <summary>
/// 待审人
/// </summary>
private string WaitAuditUser => this.DataSource == null ? "" : $";{this.DataSource["WaitAuditUser"].ToString()};";
private void ucAudit_Load(object sender, EventArgs e)
{
if (!this.DesignMode && this.DataSource != null)
{
this.SetEnabled();
this.lbAuditState.Text = this.GetAuditStateText();
this.lbAuditDateTime.Text = this.DataSource["AuditDateTime"].ToString();
this.lbWaitAuditUser.Text = this.DataSource["WaitAuditUser"].ToString();
this.lbAuditUser.Text = this.DataSource["AuditUser"].ToString();
this.tbAuditRemark.Text = this.DataSource["AuditRemark"].ToString();
//
this.rbInit.CheckedChanged += RadioButton_CheckedChanged;
this.rbPass.CheckedChanged += RadioButton_CheckedChanged;
this.rbNoPass.CheckedChanged += RadioButton_CheckedChanged;
this.rbRevert.CheckedChanged += RadioButton_CheckedChanged;
}
}
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
//只接收选中事件
if ((sender as RadioButton).Checked)
{
this.DataSource["AuditState"] = this.GetAuditState();
this.DataSource.EndEdit();
//设定审批信息
this.SetAuditInfo();
//触发状态改变事件
this.AuditStateChanged?.Invoke(this, new EventArgs());
//设置有效性
this.SetEnabled();
}
}
private int GetAuditState()
{
if (this.rbPass.Checked)
return 1;
if (this.rbNoPass.Checked)
return 2;
if (this.rbRevert.Checked)
return 3;
return 0;
}
private string GetAuditStateText()
{
string result = "";
switch (this.AuditState)
{
//0:待审; 1:通过; 2:不通过; 3:返审
case 0: result = "待审"; break;
case 1: result = "通过"; break;
case 2: result = "不通过"; break;
case 3: result = "返审"; break;
default: result = "未知"; break;
}
return result;
}
private void SetEnabled()
{
this.Enabled = this.IsActive && this.WaitAuditUser.IndexOf($";{Utils.LoginUser};") >= 0;
this.tbAuditRemark.Enabled = this.Enabled && this.IsWaitAudit;
}
private void SetAuditInfo()
{
this.lbAuditState.Text = this.GetAuditStateText();
string AuditUser = this.IsWaitAudit ? "" : Utils.LoginUser;
string AuditDateTime = this.IsWaitAudit ? "" : Utils.Now();
//更新界面
this.lbAuditUser.Text = AuditUser;
this.lbAuditDateTime.Text = AuditDateTime;
//更新数据源
this.DataSource["AuditUser"] = AuditUser;
this.DataSource["AuditDateTime"] = AuditDateTime;
this.DataSource.EndEdit();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Tools.MyUtils
{
public abstract class DrawHelper
{
//基础设置
private static readonly int bitmap_width = 32; //图片大小 32*32
private static readonly int label_width = 60; //文本标签长度
private static readonly int label_height = 24; //文本标签高度
private static readonly int gab_width = 6; //标签间隔
private static readonly int init_x = 50; //起始坐标x
private static readonly int init_y = 50; //起始坐标y
//横坐标相对位置:因为单向绘制,这里只需考虑横坐标
private static readonly int arrow_width = label_width + gab_width - bitmap_width; //箭头长度
private static readonly int arrow_relative_x = bitmap_width; //箭头相对位置x
private static readonly int label_relative_x = label_width / 2 + bitmap_width / 2 + gab_width; //标签相对位置x
private static readonly int bitmap_relative_x = label_width + gab_width; //图片相对位置x
//纵坐标固定位置
private static readonly int arrow_y = init_y + bitmap_width / 2; //箭头纵坐标绝对位置
private static readonly int label_y = init_y + bitmap_width; //标签纵坐标绝对位置
static Graphics g = null;
static Point bitmap_location = default(Point);
static Point arrow_location = default(Point);
static Point label_location = default(Point);
/// <summary>
/// 绘制流程节点
/// </summary>
/// <param name="graphics"></param>
/// <param name="dt"></param>
public static int DrawFlowNode(Graphics graphics, DataTable dt)
{
//初始化绘图对象
g = graphics;
//初始化默认位置
bitmap_location = new Point(init_x, init_y);
//绘制节点
for (int i = 0; i < dt.DefaultView.Count; i++)
{
DataRow row = dt.DefaultView[i].Row;
string name = row["Name"].ToString();
BitmapType bitmapType = BitmapType.AuditNode;
if (i == 0)
{
bitmapType = BitmapType.StartNode;
}
else if (i == dt.DefaultView.Count - 1)
{
bitmapType = BitmapType.EndNode;
}
DrawNode(name, bitmapType, row);
}
//返回流程长度
return bitmap_location.X;
}
/// <summary>
/// 绘制节点
/// </summary>
/// <param name="text"></param>
/// <param name="bitmapType"></param>
private static void DrawNode(string text, BitmapType bitmapType, DataRow row)
{
//获取当前位置
int x = bitmap_location.X;
//是否开始节点
bool IsStartNode = bitmapType == BitmapType.StartNode;
if(IsStartNode)
{
label_location = new Point(x - (label_width / 2) + (bitmap_width / 2), label_y);
}
//绘制
if (!IsStartNode)
{
DrawArrow(arrow_location);
}
DrawLabel(label_location, text);
DrawBitmap(bitmap_location, bitmapType);
//记录Location,用于点击判定
if (row != null && row.Table.Columns.Contains("Location"))
{
row["Location"] = $"Location:{label_location.X},{init_y};Size:{label_width},{bitmap_width + label_height}";
row.EndEdit();
}
//位置移至下一节点
arrow_location = new Point(x + arrow_relative_x, arrow_y);
label_location = new Point(x + label_relative_x, label_y);
bitmap_location = new Point(x + bitmap_relative_x, init_y);
}
/// <summary>
/// 绘制图形
/// </summary>
private static void DrawBitmap(Point location, BitmapType bitmapType)
{
Bitmap bmp = GetBitmap(bitmapType);
g.DrawImageUnscaled(bmp, location);
}
/// <summary>
/// 绘制箭头
/// </summary>
/// <param name="location"></param>
private static void DrawArrow(Point location)
{
Pen pen = new Pen(Brushes.Blue);
Point end = new Point(location.X + arrow_width, location.Y);
Point down = new Point(end.X - 5, end.Y + 3);
Point up = new Point(end.X - 5, end.Y - 3);
g.DrawLine(pen, location, end);
g.DrawLine(pen, down, end);
g.DrawLine(pen, up, end);
}
/// <summary>
/// 绘制标签
/// </summary>
/// <param name="location"></param>
/// <param name="text"></param>
private static void DrawLabel(Point location, string text)
{
Font font = new Font("宋体", 9f);
Size size = new Size(label_width, label_height);
Rectangle rectangle = new Rectangle(location, size);
StringFormat format = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center,
FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit,
Trimming = StringTrimming.EllipsisPath
};
g.DrawRectangle(new Pen(Brushes.Red), rectangle);
g.DrawString(text, font, Brushes.Black, rectangle, format);
}
/// <summary>
/// 获取资源图片
/// </summary>
/// <param name="bitmapType"></param>
/// <returns></returns>
private static Bitmap GetBitmap(BitmapType bitmapType)
{
Bitmap bmp = null;
switch (bitmapType)
{
case BitmapType.AuditNode: bmp = Properties.Resources.node_audit; break;
case BitmapType.StartNode: bmp = Properties.Resources.node_start; break;
case BitmapType.EndNode: bmp = Properties.Resources.node_end; break;
default:break;
}
return bmp;
}
}
enum BitmapType
{
StartNode,
AuditNode,
EndNode,
}
}
......@@ -45,6 +45,20 @@ namespace Tools.MyUtils
/// </summary>
public static string TempPath => $@"{Application.StartupPath}\temp";
#endregion
#region 常用日期
public static string LoginUser = "";
/// <summary>
/// 获取当前日期
/// </summary>
/// <returns></returns>
public static string Now()
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
#endregion
#region 打开文件
......
......@@ -70,6 +70,36 @@ namespace Tools.Properties {
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap node_audit {
get {
object obj = ResourceManager.GetObject("node_audit", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap node_end {
get {
object obj = ResourceManager.GetObject("node_end", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap node_start {
get {
object obj = ResourceManager.GetObject("node_start", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
......
......@@ -121,6 +121,15 @@
<data name="excel" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\excel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="node_audit" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\node_audit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="node_end" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\node_end.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="node_start" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\node_start.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="sql" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\sql.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
......
......@@ -64,6 +64,18 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="MyCommon\controls\ucAudit.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="MyCommon\controls\ucAudit.Designer.cs">
<DependentUpon>ucAudit.cs</DependentUpon>
</Compile>
<Compile Include="MyCommon\controls\ucAuditNode.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="MyCommon\controls\ucAuditNode.Designer.cs">
<DependentUpon>ucAuditNode.cs</DependentUpon>
</Compile>
<Compile Include="MyCommon\IEditForm.cs" />
<Compile Include="MyCommon\wEditBasic.cs">
<SubType>Form</SubType>
......@@ -73,6 +85,13 @@
</Compile>
<Compile Include="MyData\DBHelper.cs" />
<Compile Include="MyData\SqlHelper.cs" />
<Compile Include="MyUtils\DrawHelper.cs" />
<Compile Include="UI\wAuditDemo.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="UI\wAuditDemo.Designer.cs">
<DependentUpon>wAuditDemo.cs</DependentUpon>
</Compile>
<Compile Include="UI\wAutoClass.cs">
<SubType>Form</SubType>
</Compile>
......@@ -160,6 +179,12 @@
<Compile Include="wMain.Designer.cs">
<DependentUpon>wMain.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="MyCommon\controls\ucAudit.resx">
<DependentUpon>ucAudit.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MyCommon\controls\ucAuditNode.resx">
<DependentUpon>ucAuditNode.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MyCommon\wBasic.resx">
<DependentUpon>wBasic.cs</DependentUpon>
</EmbeddedResource>
......@@ -191,6 +216,9 @@
<EmbeddedResource Include="UI\wAppModelEdit.resx">
<DependentUpon>wAppModelEdit.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\wAuditDemo.resx">
<DependentUpon>wAuditDemo.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\wAutoClass.resx">
<DependentUpon>wAutoClass.cs</DependentUpon>
</EmbeddedResource>
......@@ -288,5 +316,14 @@
<ItemGroup>
<None Include="Resources\测试.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\node_end.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\node_start.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\node_audit.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -29,6 +29,7 @@ namespace Tools
this.CreateModule(typeof(UI.wAppModel), "APP模块管理"),
this.CreateModule(typeof(UI.wSysModule), "功能模块管理"),
this.CreateModule(typeof(UI.wAutoClass), "类生成工具"),
this.CreateModule(typeof(UI.wAuditDemo), "审批示例"),
};
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment