为什么会这样(控件中的枚举)

秋叶园 2003-01-16 11:01:02
this.numberTextBox1.Masked = CustomControls.NumberTextBox.Mask.Decimal;
-->老是在任务列表中有:
变量“Mask”未声明或从未赋值。
可是却能编译,每次用这个控件,看到这个就恶心....
为了解决问题代码如下:
=====================================
using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
using System.Text.RegularExpressions;

namespace CustomControls
{
/// <summary>
/// NumberTextBox 的摘要明。
/// </summary>
///

[ToolboxBitmap(typeof(TextBox))]
public class NumberTextBox : System.Windows.Forms.TextBox
{
public enum Mask {None,Decimal,Integer }

private System.Decimal m_value;
private bool m_editing;
private Mask m_mask;
private string m_leftCoinchar,m_rightCoinchar;
private int m_DecimalPlace;

private System.ComponentModel.Container components = null;

public NumberTextBox()
{
InitializeComponent();
if(Masked != Mask.None)
m_mask = Masked;

}

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

#region Component Designer generated code
private void InitializeComponent()
{
//
// NumberTextBox
//
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.OnKeyPress);
this.TextChanged += new System.EventHandler(this.MaskedTextBox_TextChanged);
this.Layout += new System.Windows.Forms.LayoutEventHandler(this.NumberTextBox_Layout);
this.Leave += new System.EventHandler(this.OnLeave);
this.Enter += new System.EventHandler(this.MaskedTextBox_Enter);

}
#endregion
private void OnKeyPress(object sender, KeyPressEventArgs e)
{
NumberTextBox sd = (NumberTextBox) sender;
switch(m_mask)
{
case Mask.Decimal:
sd.MaskDecimal(e);
break;
case Mask.Integer:
sd.MaskDigit(e);
break;
}
}

private void OnLeave(object sender, EventArgs e)
{
this.m_editing=false;
if (this.Masked!=Mask.None)
this.Text=this.m_leftCoinchar+this.m_value.ToString()+this.m_rightCoinchar;
}

private void MaskDigit(KeyPressEventArgs e)
{

if(Char.IsDigit(e.KeyChar) || e.KeyChar == 8)
e.Handled = false;
else
e.Handled = true;

}

private void MaskDecimal(KeyPressEventArgs e)
{
if(Char.IsDigit(e.KeyChar) ||( e.KeyChar == '.'&& this.Text.IndexOf('.')<0) || e.KeyChar == 8||e.KeyChar==13)
e.Handled=false;
else
e.Handled = true;
}

private void MaskedTextBox_TextChanged(object sender, System.EventArgs e)
{
if (this.m_editing &&this.m_mask!=Mask.None)
{
this.m_editing=false;

if (this.Text=="") {this.m_value=0;this.Text="0";}

if (this.Text.ToString().IndexOf(".")>=0)
{
if (this.Text.Length-this.Text.ToString().IndexOf(".")>this.m_DecimalPlace+1) {this.Text=this.m_value.ToString();}
}

try
{
this.m_value=System.Decimal.Parse(this.Text);
}
catch
{
this.Text=this.m_value.ToString();
};
this.m_editing=true;

}

}

private void MaskedTextBox_Enter(object sender, System.EventArgs e)
{
this.m_editing=true;
// this.TextAlign=System.Windows.Forms.HorizontalAlignment.Right;
if (this.Masked!=Mask.None)
{
this.Text=this.m_value.ToString();
this.SelectAll();}
}

private void NumberTextBox_Layout(object sender, System.Windows.Forms.LayoutEventArgs e)
{

this.m_editing=false;
if (this.Masked!=Mask.None)
this.Text=this.m_leftCoinchar+this.m_value.ToString()+this.m_rightCoinchar;
}

/// <summary>
/// //数值
/// </summary>
public decimal value
{
get
{
return m_value;
}
set
{
m_value=value;
}
}

public string leftCoinchar
{
get
{
return m_leftCoinchar;
}
set
{
this.m_leftCoinchar=value;
this.Invalidate();
}
}
public string rightCoinchar
{
get
{
return m_rightCoinchar;
}
set
{
this.m_rightCoinchar=value;
this.Invalidate();
}
}

public int DecimalPlace
{
get
{
return m_DecimalPlace;
}
set
{
m_DecimalPlace=value;
this.Invalidate();
}
}

public Mask Masked
{
get { return m_mask;}
set
{
m_mask = value;
if (m_mask==Mask.Decimal||m_mask==Mask.Integer)
this.Text=this.m_leftCoinchar+this.m_value.ToString()+this.m_rightCoinchar;
this.Invalidate();
}
}


}
}
...全文
40 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋叶园 2003-01-16
  • 打赏
  • 举报
回复
不也是个dll吗
秋叶园 2003-01-16
  • 打赏
  • 举报
回复
何为标准控件
秋叶园 2003-01-16
  • 打赏
  • 举报
回复
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;


namespace HIS.药品分系统.药典子系统.WinForm
{
/// <summary>
/// 药品录入 的摘要说明。
/// </summary>
public class F_新建_药品录入 : System.Windows.Forms.Form
{
private CustomControls.NumberTextBox numberTextBox1;
...
private System.ComponentModel.Container components = null;


public F_新建_药品录入()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent
{
...
this.numberTextBox1 = new CustomControls.NumberTextBox();
...
this.Pan_药品信息.Controls.AddRange(new System.Windows.Forms.Control[] {
this.numberTextBox1 = new CustomControls.NumberTextBox();
...
//
// numberTextBox1
//
this.numberTextBox1.DecimalPlace = 0;
this.numberTextBox1.leftCoinchar = null;
this.numberTextBox1.Location = new System.Drawing.Point(528, 168);
this.numberTextBox1.Masked = CustomControls.NumberTextBox.Mask.Decimal;
this.numberTextBox1.Name = "numberTextBox1";
this.numberTextBox1.rightCoinchar = null;
this.numberTextBox1.Size = new System.Drawing.Size(112, 21);
this.numberTextBox1.TabIndex = 122;
this.numberTextBox1.Text = "0";
this.numberTextBox1.value = new System.Decimal(new int[] {
0,
0,
0,
0});

}
#endregion
这是主要的(...代表省略了)
七里十二斋 2003-01-16
  • 打赏
  • 举报
回复
你的控件不是标准控件,不是标准控件都可能产生类似的问题,其实是没关系,你的应用程序肯定跑的很好
kinglht 2003-01-16
  • 打赏
  • 举报
回复
this.numberTextBox1.Masked = CustomControls.NumberTextBox.Mask.Decimal;
这条语句在哪里?
秋叶园 2003-01-16
  • 打赏
  • 举报
回复
我的是dll了,程序还要还要编译吗?
七里十二斋 2003-01-16
  • 打赏
  • 举报
回复
你的程序正常,任务中的这个报错没问题
可能是编译的一些顺序问题,不是真错了
秋叶园 2003-01-16
  • 打赏
  • 举报
回复
在线等侯
Tangheng2002 2003-01-16
  • 打赏
  • 举报
回复
你把这句提到类的外面去写
public enum Mask {None,Decimal,Integer }
枚举也是一种class,写在类里面会当成一种类的嵌套用法
试试看

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧