散点分 ,顺便请教大家个自定义控件的问题

zlb789 2009-08-21 10:47:00
问题是这样的:

一个定义webcontrol 继承System.Web.UI.WebControls.TextBox ,重写了 Text 等一些属性和方法,

现在有这样一个问题, 如果控件设置为 密码模式后,竟然可以通过text 属性直接赋值, 而系统的textbox 控件是不可以这样的. 只能通过attribute.add("value","") 设置值.

发现这个问题后, 我在textbox 的text属性里 set 中加了这句
if (TextMode == TextBoxMode.Password)
{
base.Text = "";
} ,这样写了之后 ,是不可以赋值了 ,但是通过attribute.add("value","") 这样也不能赋值了.


怎么才能实现textbox 的密码那样的功能???
...全文
137 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
乐于编程 2009-08-29
  • 打赏
  • 举报
回复
努力钻研就能有收获的时候,前方还有无尽的问题在等着你,加油吧!
xjoydnn 2009-08-25
  • 打赏
  • 举报
回复
不懂这个啊
zlb789 2009-08-25
  • 打赏
  • 举报
回复
非常感谢各位, 看了下 textbox 的源码 , 对着看了下自定义控件的代码, 终于发现问题了,
mxc1225 2009-08-25
  • 打赏
  • 举报
回复
不太明白你的意思!?
宝_爸 2009-08-25
  • 打赏
  • 举报
回复
在System.web.dll中

命名空间是System.Web.UI.Controls。

你必须先要知道是什么引起的问题,才能确认你对Text属性的修改是否是引起问题的原因。
因为我写了个简单的MyTextBox,没发现你说的问题。
flyerwing 2009-08-25
  • 打赏
  • 举报
回复
菜鸟帮顶!
enihs 2009-08-25
  • 打赏
  • 举报
回复
是散分帖吗?
hali999 2009-08-25
  • 打赏
  • 举报
回复
偶也不太懂,继续学习
zlb789 2009-08-24
  • 打赏
  • 举报
回复
可能是我没说清楚,
我是在Text 的属性 里加的判断
set
{
if (TextMode == TextBoxMode.Password)
{
base.Text = "";
}
...
}
zlb789 2009-08-24
  • 打赏
  • 举报
回复
Reflector 用这个我知道可以看源码 , 可我找了下根本找不到是那个dll


宝_爸 2009-08-24
  • 打赏
  • 举报
回复
要解决你的问题,试一试:

if (TextMode == TextBoxMode.Password)
{
Attributes["value"] = "";
}
wenblue7 2009-08-24
  • 打赏
  • 举报
回复
顶了好贴啊!
wonder888888 2009-08-24
  • 打赏
  • 举报
回复
帮顶,接分
javacaspnet 2009-08-24
  • 打赏
  • 举报
回复
帮顶,接分
宝_爸 2009-08-24
  • 打赏
  • 举报
回复
System.Web.UI.Webcontrol.TextBox的Text属性很简单:

[Bindable(true, BindingDirection.TwoWay), PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty), Editor("System.ComponentModel.Design.MultilineStringEditor,System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), Localizable(true), WebCategory("Appearance"), DefaultValue(""), WebSysDescription("TextBox_Text")]
public virtual string Text
{
get
{
string str = (string) this.ViewState["Text"];
if (str != null)
{
return str;
}
return string.Empty;
}
set
{
this.ViewState["Text"] = value;
}
}



zlb789 2009-08-24
  • 打赏
  • 举报
回复
顶起
宝_爸 2009-08-24
  • 打赏
  • 举报
回复
在下面的函数里使用的TextMode属性。不过这是个private,你改写不了

private bool SaveTextViewState
{
get
{
if (this.TextMode == TextBoxMode.Password)
{
return false;
}
if (((base.Events[EventTextChanged] == null) && base.IsEnabled) && ((this.Visible && !this.ReadOnly) && (base.GetType() == typeof(TextBox))))
{
return false;
}
return true;
}
}
宝_爸 2009-08-24
  • 打赏
  • 举报
回复
我用Reflector看的源码。
TextMode的赋值也没啥奇怪的地方,很简单

public virtual TextBoxMode TextMode
{
get
{
object obj2 = this.ViewState["Mode"];
if (obj2 != null)
{
return (TextBoxMode) obj2;
}
return TextBoxMode.SingleLine;
}
set
{
if ((value < TextBoxMode.SingleLine) || (value > TextBoxMode.Password))
{
throw new ArgumentOutOfRangeException("value");
}
this.ViewState["Mode"] = value;
}
}
宝_爸 2009-08-24
  • 打赏
  • 举报
回复
我写了个简单的自定义textbox。没发现你说的问题。
和textbox的行为完全一样。

[DefaultProperty("Text")]
[ToolboxData("<{0}:MyTextbox runat=server></{0}:MyTextbox>")]
public class MyTextbox : TextBox
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]


protected override void RenderContents(HtmlTextWriter output)
{
base.RenderContents(output);
}
}
lingxizhixia 2009-08-24
  • 打赏
  • 举报
回复
color=#003366]学习 嘻嘻[/color]
加载更多回复(12)

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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