File 与 Log #3--动态加入控件,[图片版]访客计数器(用.txt档案来记录)

File 与 Log #3--动态加入控件,[图片版]访客计数器(用.txt档案来记录)

以前的两篇文章(收录在书本「上集」的第十七章)

请看「ASP.NET专题实务」,松岗出版

File 与 Log #1--ASP.NET的档案与I/O Stream(为系统记录Log文件)

File 与 Log #2--[图片版]访客计数器(用.txt档案来记录)

现在这么多免费资源,应该也没人得自己制作「访客计数器」了

这个范例的结果或许不合用,但其中实作的经验倒是很有趣

读者来信询问:

      上述第二个范例,如果改用 Image控件(<asp:Image>)而且在后置程序代码撰写,该怎么做?

其实很简单,只不过是「动态加入控件」而已

您可以在我书本「上集」第三章的 PlaceHolder控件 或是书本「下集」找到不少范例

用程序代码动态加入Web Form控件,加入ASP.NET网页

只要写成 Page.Form.Controls.Add()即可。

动态加入列表控件的「子选项」,例如:单选 DropDownList 或是 复选CheckBoxList

-- 列表控件ID.Items.Add()

[习题]动态新增 DropDownList或 ListBox底下的新项目(Item)#1

动态加入HTML卷标的属性(attribute)

-- XXX.Attributes.Add("属性名称", "值")

[习题]GridView 光棒效果 与 JavaScript -- e.Row.Attributes.Add()方法

上述三者的程序是否很相似呢?

上一个范例,仍使用传统HTML的 <img>标签

假设目前的访客数是 1234,那么我们输出时,要先从最后一个 "4"输出,然后输出 "3" .....

简单的说,就是把结果「反过来」、一个一个地地对应到这个数字的「图片」,输出到画面上

while (Length >= 1)    {

//--访客人数的每一位数字,都用图片来呈现。

strURL = "<img src=‘image/" + visitors.Substring((Length-1) ,1) + "图片文件名.gif‘ />" + strURL;

// 因为 C#语法没有VB的 Mid()函数,所以C#语法里面,改写成

// 程序代码 strURL = "<img src=‘image/" + Mid(visitors, Length, 1) + "图片文件名.gif‘ />" + strURL;

Length = (Length - 1);

}

上面这种作法,有个好处:当您的数字从 999

要提升到四位数 1000的时候,不需要额外的判断式与程序代码去防呆

但是,如果改成 <asp:Image>控件,那就不同了!

因为我们在后置程序代码动态加入控件,所以必须「循序」输出,从头到尾循序输出

假设目前的访客数是 1234,那么我们输出时,要先从第一个 "1"输出,然后输出 "2" .....

for(int i =1; i <= Length; i++)

{   //--访客人数的每一位数字,都用图片来呈现。

// 因为 C#语法没有VB的 Mid()函数,

// 程序代码 strURL = "<img src=‘image/" & Mid(visitors, i, 1) + "图片文件名.gif‘ />" & strURL

//  所以C#语法里面,改写成 --

Image img = new Image();

img.ImageUrl = "image/" + visitors.Substring((i-1), 1) + "图片文件名.gif";

Page.Form.Controls.Add(img);   //动态加入控件。

}

另外这个范例还发现另一个缺失,就是「读取」文本文件时,太晚关闭资源

如果程序有错,就会锁住这个 .txt档案,无法释放。

建议把关闭&释放资源的程序向上移动

读取完,不用了就立刻关闭、释放。

//====读取档案 (务必修改这个档案的权限,需要「写入」的权限)====

StreamReader sr = new StreamReader(Server.MapPath("counter.txt"));

//--把档案内, 原本的访客人数[加一]

string visitors = sr.ReadLine();

        sr.Close();   // 档案读取,结束!

        sr.Dispose();

相关文章:动态加入控件

[转贴]ASP.NET动态加入控件

[习题].FindControl()方法 与 PlaceHolder控件 #1(动态加入「子控件」,因Page_Load而发生的错误)

其实动态加入 Web Form控件并不难,

大部分的人是卡在「动态加入控件了,但用户输入的值,后置程序代码却抓不到」  :-)

可以参考这三篇文章,从这一篇开始:

自动化投票区、网络问卷、问卷调查,如何规划与设计?#1(观念篇)......考验初学者能力的一门课

时间: 2024-10-01 07:45:33

File 与 Log #3--动态加入控件,[图片版]访客计数器(用.txt档案来记录)的相关文章

仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源代码)

转载请说明原出处,谢谢~~ 上一篇仿酷狗日志结束后,整个换肤功能就仅仅剩下调色板功能没有做了.我本以为会非常easy.可是研究了酷狗的调色板功能后发现不是那么简单的事情.首先看一下酷狗的调色板的样子: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1aG9uZ3NodQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > waterm

PDF创建及动态转换控件activePDF Server

activePDF Server控件可以方便而快捷的在您的企业应用程序或者Web应用程序中添加PDF创建及动态转换功能.支持多线程PDF产生,进行颜色管理,字体嵌入,安全设置等. 具体功能: 自动PDF转换 无论是采用COM或者.NET,您都可以方便得在您的应用程序中设置activePDF Server组件,并可以选择由activePDF动态生成的虚拟打印机.您无需担心在您的程序中无法选择打印机,您只需调用SetPrinterAsDefault方法便可以立即开启虚拟打印机生成PDF.只需一次性设

android 在布局中动态添加控件

第一步 Java代码 final LayoutInflater inflater = LayoutInflater.from(this); 第二步:获取需要被添加控件的布局 Java代码 final LinearLayout lin = (LinearLayout) findViewById(R.id.LinearLayout01); 第三步:获取需要添加的布局(控件) Java代码 LinearLayout layout = (LinearLayout) inflater.inflate( R

WPF 中动态改变控件模板

在某些项目中,可能需要动态的改变控件的模板,例如软件中可以选择不同的主题,在不同的主题下软件界面.控件的样式都会有所不同,这时即可通过改变控件模板的方式实现期望的功能. 基本方法是当用户点击切换主题按钮是加载新的资源字典,并使用新加载的资源字典替代当前的资源字典这时要用到ResourceManager. 假设现有两个不同的资源字典文件Dictionary1.xaml和Dictionary2.xaml存在于Themes文件夹内: 在MainPage中使用其中一个资源字典作为默认样式文件: <Win

动态创建控件 #Create(...)

1.在类中创建一个控件对象;例:CButton m_btn;2.用Create创建一个对象(#其实已经与其绑定)m_btn.Create(.....); #注意Create()函数的参数3. #这是动态创建控件的一种方法....

vc中 动态创建控件

// 动态创建一个静态文本框 CStatic* CPICTUREDlg::CreateOneStatic(LPCTSTR str, CRTSTR Coord, UINT IDC) { CStatic *pStatic =NULL; pStatic = new CStatic; ASSERT_VALID(pStatic); pStatic->Create(str,WS_CHILD|WS_VISIBLE|SS_CENTER,this,IDC); return pStatic; } 动态创建控件,自绘

New UI-Java代码动态添加控件或xml布局

New UI-Java代码动态添加控件或xml布局  --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目录:http://blog.

动态创建控件

动态创建控件 var sarr: array [0 .. 2] of tedit; // 动态定义组件数组 But: array of TButton; // 静态定义组件数组 //动态创建控件: SetLength(But, 3); // 设置控件数量 for i := 0 to High(But) - 1 do begin But[i] := TButton.Create(Form1); But[i].Parent := Form1; // 设置父 But[i].Name := 'But'

Android 在布局容器中动态添加控件

这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉已有的控件 3.使用,来个小demo就明白了 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save