cs架构的需要加载什么控件吗,
vb或vc等语言开发,比如最常用的oicq就是。而b/s代表的是服务器端由web服务器发放,客户端由浏览器接收的系统,它的前台是html语言,由浏览器解释。b/s结构可以由web服务器能够解释的脚本语言如asp,php或jsp等编写,也可以由vb,vc或perl等语言写成cgi形式。严格来说,b/s结构也是一种c/s结构。
如果只是要实现点击下按钮的话应该可以
你可以遍历所有控件,然后判断是INPUT,判断是BUTTON类型,然后判断ID(通过网站源代码看)是不是这个按钮的,然后就check()就可以了。
C/C++ code
MSHTML::IHTMLElementCollection objAllElement=NULL;
MSHTML::IHTMLDocument2 objDocument=NULL;
CString strUrl,strTemp;
strUrl=m_ctrlWebGetLocationURL();//得到当前网页的URL
if(strUrlIsEmpty())
return;
objDocument=(MSHTML::IHTMLDocument2 )m_ctrlWebGetDocument(); //由控件得到IHTMLDocument2接口指针
objDocument->get_all(&objAllElement); //得到网页所有元素的集合
//由于所有页面下载完后都会执行这个函数,所以必须根据URL判断消息来源网页
if(strUrl=="http://regemail163com/mailregAll/reg0jspfrom=163mail_right" )
{
CComPtr<IDispatch>pDisp;
long lcount = 0;
objAllElement->get_length(&lcount);
for(int i=0;i<lcount;i++)
{
_variant_t index;
indexvt=VT_I4;
indexintVal=i;
IDispatchPtr disp;
disp=objAllElement->item(index,index);
if(disp==NULL)
continue;
else
{
MSHTML::IHTMLInputElementPtr pInput(disp);
if(pInput)
{
BSTR bstrtype;
pInput->get_type(&bstrtype);
//printf(_bstr_t(bstrtype));
if(StrCmpW(bstrtype,L"button")==0)
{
MSHTML:ispHTMLButtonElementPtr pElement(disp);
// pElement=pDisp;
if(pElement)
{
_bstr_t strname=pElement->GetclassName();//>onclick;
if(StrCmpW(strname,L"百度一下")==0)
{
pElement->click();
}
}
}
SysFreeString(bstrtype);
}
}
}
objAllElement->Release();
}
asp net的控件分为内置和外置两种。asp net的内置控件分为两种:HTML 控件 (HTML control)和用户控件 (User control)。外置控件,在使用前,需要将其添加到Visual Studio NET环境中。然后就可以通过启动一个新项目来使用新的控件。 虽然有的时候,控件在开发机器上运行正常,但当程序被部署到终端用户机器上时,会出现问题。因为很多终端机器不允许安装外置控件,对于上述问题有简单实用的解决办法-“在服务器上部署 “fp_client” 文件夹”。
fp_client 文件夹包含所有ASPNET外置控件需要的脚本文件。 拿Spread控件为例,Web 页面上的 Spread 控件实例从服务器上的 fp_client 文件夹中读取前台格式化、样式和脚本功能。 fp_client 文件夹的默认安装路径是:C:\Program Files\GrapeCity\SpreadASP5dotNet20\v502015\fp_client\fpspread\5_0_2015_2008\HTC
我们需要在 webconfig 文件中添加以下代码 fp_client 文件夹进行正确的加载: <appSettings><addkey=fp_clientvalue=fp_client/></appSettings>下面是两个有助于我们更加深入的去解决该问题问题的相关点: 1上面的标签仅在你想要从程序根目录下载“fp_client”文件夹是需要 ,在这种情况下,你需要复制 fp_client 文件夹并且把它粘帖到程序的根目录下,或者创建一个映射到 fp_client 文件夹的虚拟路径。 2在服务器上有很多网址运行 Spread for ASPNET,我们仅需要把 fp_client 文件夹 复制到服务器的根目录上即可(而不是程序的根目录)。在这种情形下, 上述 webconfig 标签是不需要添加的,程序仍然可以完美运行。 1、ClientIDMode
渲染ASP NET控件时会自动生成一个ID,当在客户端脚本中引用它们时,却会制造不少麻烦,虽然它是命名容器和ID的简单串联,但仍然无法预测生成的ID范围
ASP NET 40使用ClientIDMode属性解决了这个问题,它允许控制生成这些ID的方法,ClientIDMode有四个可选择的值:AutoID,Static,Predictable和Inherit下面是这四个值的含义解释:
AutoID – 和40以前的版本保持一致,自动生成ID
Static – 指定ID的值,在渲染控件时不会发生变化
Predictable – 指定后缀,然后和容器控件的ID属性进行合并
Inherit – 继承父控件的设置
注意,Page的默认ClientIDMode属性的值是AutoID,可以通过@ Page指令设置页面级的值,还可以通过修改Web配置文件设置应用程序级的值
[pre]
<systemweb>
<pages clientIDMode=Predictable></pages> </systemweb>
[/pre]
2、Meta关键字和Meta描述
在ASP NET 40中Page类增加了两个新的属性:Meta Keywords和Meta Description,可以在运行时设置这两个属性,通过数据库或其它源驱动,并允许动态设置标签,描述特定的页面,下面的Page标签显示了这两个属性 [pre]<%@PageLanguage=C#AutoEventWireup=trueKeywords=keyword1,keyword2Description=mydescription%>C#AutoEventWireup=trueKeywords=keyword1,keyword2Description=mydescription%>C#AutoEventWireup=trueKeywords=keyword1,keyword2Description=mydescription%>[/pre]3、数据绑定控件中的行持久性选择
ASP NET数据绑定控件,如Grid View,都支持行选择,但它们应该选择每个页面上相同编号的行,但ASP NET 40以前的版本中,行持久性选择是不能实现的,因为以前的版本选择后续页面上的行时是基于行索引的,ASP NET 40提供了一个直观的方法解决了这一问题
数据绑定控件现在提供了一个EnablePersistedSection属性,它可以帮助实现行持久性选择。
4、AutoEventWireup
AutoEventWireup是很少使用但知名度很高的一个ASP NET属性,简单地说,它设置为True时,在未明确委派的情况下,允许自动调用页面事件。
它的默认值是True,AutoEventWireup属性的缺点在MSDN上有详细描述:它限制了命名事件处理程序的灵活性,另一个缺点是对性能的不利影响,对于高流量的网站,性能影响是巨大的
5、Page的Header属性
Page类现在提供了Header属性,可以在运行时绑定它,下面的代码示例显示了如何明确设置Title属性
thisHeaderTitle = My page title;
当根据某个规则动态关联一个样式表时,这个属性非常方便,在这种情况下,打印页面是理想的候选 [pre]HtmlLinkprintLink=newHtmlLink();printLinkAttributesAdd(type,text/css);printLinkAttributesAdd(rel,stylesheet);printLinkAttributesAdd(href,css/printcss);thisHeaderControlsAdd(printLink);[/pre]6、AssociatedControlID属性
可以在一个Web表单中将一个控件关联到另一个服务器控件,这时需要使用服务器控件的AssociatedControlID属性,当根据某些行为为关联的控件设置热键时,这个属性就可以派上用场了
AssociatedControlID属性的默认值是一个空字符串,它表示控件未与任何服务器控件关联,下面的代码显示了一个Textbox控件是如何与Label服务器控件关联的
7、ControlState属性
ASP NET最重要的状态管理技术是ViewState,它允许你在往返Web服务器的路上保留值,但由于可在父级关闭,它并不是保存信息可靠的方法
ASP NET 20为服务器控件引入了私有的ViewState,叫做ControlState,它可用来存储控件的关键信息,ASP NET可以处理它的序列化和反序列化
注意,使用时必须谨慎,因为它会影响页面的性能
8、ControlPreserveProperty
针对传统的视图状态用法,Rick Strahl为我们提供了另一个选择:PreservedProperties,它可以保存控件ID和属性名称,详细信息请参考Implementing an ASP NET PreserveProperty Control(实现ASP NET PreserveProperty控件)
9、PreviousPageType指令
PreviousPageType指令是ASP NET 20跨页面回送机制的一部分,允许指定来源页面的虚拟路径,以便强类型访问来源页面正常情况下,发送的数据可通过PreviousPage属性和FindControl方法访问,但使用强类型的PreviousPageType指令允许你访问公共属性,而不需要调用FindControl方法
这首先要看控件所在的Form类有没有实例化,若已经实例化,可以通过构造传参或委托的方式完成。
构造传参:将控件所在的Form类实例化对象作为参数传到你new的新Form中。
C#实现根据指定容器和控件名字获得控件的方法,在进行C#应用程序设计时有一定的借鉴价值。分享给大家供大家参考借鉴。具体实现方法如下:
功能代码如下:
1、/// <summary>
2、/// 根据指定容器和控件名字,获得控件
3、/// </summary>
4、/// <param name="obj">容器</param>
5、/// <param name="strControlName">控件名字</param>
6、/// <returns>控件</returns>
7、private object GetControlInstance(object obj,string strControlName)
8、{
9、IEnumerator Controls = null;//所有控件
10、Control c = null;//当前控件
11、Object cResult=null;//查找结果
12、if(objGetType() == thisGetType())//窗体
13、{
14、Controls = thisControlsGetEnumerator();
15、}
16、else//控件
17、{
18、Controls = ((Control)obj)ControlsGetEnumerator();
19、}
20、while(ControlsMoveNext())//遍历操作
21、{
22、c = (Control)ControlsCurrent;//当前控件
23、if(cHasChildren)//当前控件是个容器
24、{
25、cResult = GetControlInstance(c,strControlName);//递归查找
26、if(cResult==null)//当前容器中没有,跳出,继续查找
27、continue;
28、else//找到控件,返回
29、return cResult;
30}
31、else if(cName == strControlName)//不是容器,同时找到控件,返回
32、{
33、return c;
34、}
35、}
36、return null;//控件不存在
37、}
示例如下:
((Button) GetControlInstance(this,"button7"))BackColor = ColorRed;
((Button) GetControlInstance(thisgroupBox4,"button7"))PerformClick();
C#是微软公司发布的一种面向对象的、运行于NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 NET windows网络框架的主角。
C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为NET开发的首选语言。
C#是面向对象的编程语言。它使得程序员可以快速地编写各种基于MICROSOFT NET平台的应用程序,MICROSOFT NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。
C#使得C++程序员可以高效的开发程序,且因可调用由 C/C++ 编写的本机原生函数,因此绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。
c#打印控件的使用是如何的呢?我们在编写C#打印控件实用程序的时候怎么操作呢?首先弄一个printDocument控件,然后在打印的按钮中直接调用printDocument1print()事件 再次就是写printDocument的PrintPag事件了 下面C#打印控件的使用具体实例:
//C#打印控件的使用实例 private void button1_Click(object sender, EventArgs e) { printDocument1Print(); } private void printDocument1_PrintPage(object sender, SystemDrawingPrintingPrintPageEventArgs e) { Font tabelTextFont = new Font("宋体", 10); if (dataGridView1DataBindings != null) { int[] columnsWidth = new int[dataGridView1ColumnsCount]; //C#打印控件的使用之得到所有列的个数 int[] columnsLeft=new int[dataGridView1ColumnsCount]; //for (int c = 0; c < columnsWidthLength; c++) //C#打印控件的使用之得到列标题的宽度 { columnsWidth[c] = (int)eGraphicsMeasureString( dataGridView1Columns[c]HeaderText , tabelTextFont)Width; } for (int rowIndex = 0; rowIndex < dataGridView1RowsCount; rowIndex++) //C#打印控件的使用之rowindex当前行 { for (int columnIndex = 0; columnIndex < dataGridView1ColumnsCount; columnIndex++) //C#打印控件的使用之当前列 { int w = (int)eGraphicsMeasureString( dataGridView1Columns[columnIndex]Name , tabelTextFont)Width; columnsWidth[columnIndex] = w > columnsWidth[columnIndex] w : columnsWidth[columnIndex]; } }//C#打印控件的使用 int rowHidth = 20; int tableLeft=60; int tableTop=70; columnsLeft[0]=tableLeft; for (int i=1;i<=columnsWidthLength -1;i++) { columnsLeft[i] = columnsLeft[i - 1] + columnsWidth[i - 1]+15; } StringFormat sf=new StringFormat (); sfAlignment=StringAlignmentCenter ;//居中打印 eGraphicsDrawString("欢迎石印死了开的交流!", new Font("宋体", 15), BrushesBlack, new Point( ePageBoundsWidth / 2, 20),sf );//打印标题 for (int c = 0; c < columnsWidthLength; c++) //打印表中的列名 { eGraphicsDrawString(dataGridView1Columns[c]HeaderText, new Font ("宋体",10,FontStyleBold), BrushesBlack, new Point(columnsLeft[c], tableTop)); eGraphicsDrawLine(PensBlack, new Point(columnsLeft[c]-5, tableTop - 5), new Point(columnsLeft[c]-5, tableTop + (dataGridView1 Rows Count+1)rowHidth)); }//C#打印控件的使用 eGraphicsDrawLine(PensBlack, new Point(columnsLeft[dataGridView1ColumnsCount - 1] + columnsWidth[dataGridView1ColumnsCount - 1], tableTop - 5), new Point(columnsLeft[dataGridView1ColumnsCount - 1] + columnsWidth[dataGridView1ColumnsCount - 1], tableTop + (dataGridView1RowsCount + 1) rowHidth)); //画最后面的线 eGraphicsDrawLine(PensBlack, new Point(columnsLeft[0] - 5, tableTop - 5), new Point(columnsLeft[dataGridView1ColumnsCount - 1] + columnsWidth[dataGridView1ColumnsCount - 1], tableTop - 5)); for (int rowIndex = 0; rowIndex < dataGridView1RowsCount; rowIndex++)//打印表中的内容 { for (int columnIndex = 0; columnIndex < dataGridView1ColumnsCount; columnIndex++) { eGraphicsDrawString( dataGridView1Rows[rowIndex]Cells[columnIndex]ValueToString(), tabelTextFont, BrushesBlack, new Point(columnsLeft[columnIndex], tableTop + rowHidth (rowIndex + 1))); } eGraphicsDrawLine(PensBlack, new Point(columnsLeft[0]-5, tableTop + (rowIndex +1) rowHidth-5), new Point(columnsLeft[dataGridView1ColumnsCount - 1] + columnsWidth[dataGridView1ColumnsCount - 1], tableTop + (rowIndex +1)rowHidth-5));//循环画行 } //C#打印控件的使用之 }
0条评论