快速业务通道

用托管C++编写自定义Web组合控件

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
ureChildControls();
 label->Text = value;
}
String *SearchControl::get_Value()
{
 this->EnsureChildControls();
 return textbox->Text;
}
void SearchControl::set_Value(String *value)
{
 this->EnsureChildControls();
 textbox->Text = value;
}
String *SearchControl::get_ButtonText()
{
 this->EnsureChildControls();
 return button->Text;
}
void SearchControl::set_ButtonText(String *value)
{
 this->EnsureChildControls();
 button->Text = value;
}

上述代码最棘手的部分就是EnsureChildControls()方法,其保证了子控件在之前已经被创建,如果你不添加这个,设计器将会显示一个空白的自定义控件。 当你运行上述代码时,将会发现一些设计上的缺陷。首先,文本框总是同样大小,并且不能排列多于一个SearchControl实例的标签。为进行修正,要添加第四个服务端控件到自定义Web组合控件中,在此,表格(Table)可能是处理所有控件布局问题最好的方法:

void SearchControl::CreateChildControls()
{
 System::Web::UI::WebControls::Table *table = new Table();
 TableRow *row = new TableRow();
 TableCell *cell1 = new TableCell();
 TableCell *cell2 = new TableCell();
 TableCell *cell3 = new TableCell();
 cell1->Controls->Add(label);
 cell2->Controls->Add(textbox);
 cell3->Controls->Add(button);
 row->Cells->Add(cell1);
 row->Cells->Add(cell2);
 row->Cells->Add(cell3);
 table->Rows->Add(row);
 Controls->Add(table);
}

为处理排列问题,需再再添加两个属性:LabelWidth和LabelAlign。LabelWidth保证了标签控件为一特定的单位长度,而LabelAlign允许标签使用HorizontalAlign枚举进行排列:

[Bindable(true), Category("Appearance")]
__property void set_LabelWidth(Unit value);
__property Unit get_LabelWidth();
[Bindable(true), Category("Appearance")]
__property void set_LabelAlign(HorizontalAlign value);
__property HorizontalAlign get_LabelAlign();

现在问题又有些棘手了,为指定标签的宽度与排列,可对表格单元格属性进行修改,但在单元格中并不包含标签自身。为简化起见,创建一个名为cellLabel的私有类变量,由其取代CreateChildControls()方法中的cell1,以下是LabelWidth与LabelAlign属性的实现代码:

Unit SearchControl::get_LabelWidth()
{
 this->EnsureChildControls();
 return cellLabel->Width;
}
void SearchControl::set_LabelWidth(Unit value)
{
 this->EnsureChildControls();
 cellLabel->Width = value;
}
HorizontalAlign SearchControl::get_LabelAlign()
{
 this->EnsureChildControls();
 return cellLabel->HorizontalAlign;
}
void SearchControl::set_LabelAlign(HorizontalAlign value)
{
 this->EnsureChildControls();
 cellLabel->HorizontalAlign = value;
}

处理文本框的缩放时,可使它完全充满包含其的单元格,这样,当表格缩放时,文本框也会跟着缩放。于是,当控件缩放时,文本框会随控件变化,或者你可以指定标签为控件的一个百分比,如30%,这样一来,当控件缩放时,标签与文本框都会基于百分比进行调整,以下是修改后的CreateChildControls()方法:

void SearchControl::CreateChildControls()
{
 System::Web::UI::WebControls::Table *table = new Table();
 TableRow *row = new TableRow();
 TableCell *cell2 = new TableCell();
 TableCell *c

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号