日新阁

取日三省之意,记生活珠玑,每日清新,谓日新阁.

 

2012年5月27日

c# WebBrowser网页操作-元素获取_事件操作

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Windows.Forms;// namespaceWebBrowser网页操作 { publicclassElement { //根据Name获取元素 publicHtmlElement GetElement_Name(WebBrowser wb,stringName) { HtmlElement e = wb.Document.All[Name]; returne; } //根据Id获取元素 publicHtmlElement GetElement_Id(WebBrowser wb, stringid) { HtmlElement e = wb.Document.GetElementById(id); returne; } //根据Index获取元素 publicHtmlElement GetElement_Index(WebBrowser wb,intindex) { HtmlElement e = wb.Document.All[index]; returne; } //获取form表单名name,返回表单 publicHtmlElement GetElement_Form(WebBrowser wb,stringform_name) { HtmlElement e = wb.Document.Forms[form_name]; returne; } //设置元素value属性的值 publicvoidWrite_value(HtmlElement e,stringvalue) { e.SetAttribute("value", value); } //执行元素的方法,如:click,submit(需Form表单名)等 publicvoidBtn_click(HtmlElement e,strings) { e.InvokeMember(s); } } } 这是调用这个类的窗体代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text; usingSystem.Windows.Forms; namespaceWebBrowser网页操作 { publicpartialclassForm1 : Form { Element el = newElement(); publicForm1() { InitializeComponent(); } privatevoidForm1_Load(objectsender, EventArgs e) { webBrowser1.Navigate(Application.StartupPath + @"\Test.html"); } privatevoidbutton1_Click(objectsender, EventArgs e) { el.Write_value(el.GetElement_Name(webBrowser1,"username"),"isaced"); } privatevoidbutton2_Click(objectsender, EventArgs e) { el.Write_value(el.GetElement_Id(webBrowser1, "password"), "123456"); } privatevoidbutton3_Click(objectsender, EventArgs e) { el.Btn_click(el.GetElement_Id(webBrowser1,"button"),"click");//方法用的按钮click } privatevoidbutton4_Click(objectsender, EventArgs e) { el.Btn_click(el.GetElement_Form(webBrowser1, "form1"), "submit");//先获取表单,再调用表单的submit方法 } } }

posted @ 2012-05-27 22:52 flashicp 阅读(11) 评论(0) 编辑

2012年3月9日

zend framework多模块多布局配置

zend framework多模块多布局配置

RockUX 发表于2011 年 02 月 17 日 发表评论 (0)查看评论
关键词:模块,布局,layout,配置

zend framework对多模块的支持是很好的,但是可能是由于功能太过强大的缘故,部署起来并不是很容易。许多人在使用过程中都会遇到这样那样的问题,而且 zend framework现在已经到1.11版本了,网络上的很多资料都还停留在旧版本上,因此我在这里以当前的最新版本1.11为例,来简单介绍一下如何使用 zend framework创建模块化的应用程序。由于今后框架的版本升级,有些内容可能会过时,请及时参阅最新的使用手册

1、准备工作

首先假设你已经部署了web服务器和php,并下载了zend framework的最新版本,创建了一个最原始的zend framework项目,并可以访问默认的action了。你可以使用zend framework工具来创建项目,具体操作参见使用zend framework创建项目。当然也可以自己手动建立文件夹和文件,参见zend framework推荐的项目目录结构

简单地看一下默认的几个重要目录。
首先是public,它不但存放了程序的入口点index.php,还可以存放图片,css,javascript文件等。
其次是library,用于存放一些类库,包括你自己定义的或第三方的类库。
然后是test,用于存放单元测试等测试文件的。
最后,也是和我们这里要讲的关系最大的目录——application。进到application目录下,会有以下目录:
configs:存放配置文件,一般会有一个主配置文件application.ini;
controllers:操制器,如默认的IndexController.php;
models:存放业务逻辑,数据模型等文件;
views:视图层的脚本,一般以.phtml为后缀名;
modules:模块目录,使用工具默认选项自动生成的是没有这个目录的,需要手动添加。modules底下可以包含多个以模块名命名的文件夹,如 admin,默认是default,一个文件夹代表一个模块,其下的目录结构与application目录类似,又可以包含 controllers,models,views等目录。需要注意的是模块下的controllers下面的文件的类名请加上模块名前缀,如 application/modules/admin/controllers/IndexController.php的类名为 Admin_IndexController。

如果你需要在项目中方便的使用你自己写的一些类库(如名称空间是Rockux),或是第三方的类库,可以修改application.ini文件,添加以下行:

autoloaderNamespaces.rockux ="Rockux_"
autoloaderNamespaces.thirdParty ="ThirdPartyLibrary_"

当然你也可以根据需要多添加几个,不过请注意最后面的下划线。

2、建立模块

现在我们来创建一个admin模块,目录如下:
application/modules/admin/controllers
application/modules/admin/models
application/modules/admin/views
application/modules/admin/views/scripts
application/modules/admin/views/helpers
application/modules/admin/views/filters
并创建以下文件:
application/modules/admin/controllers/IndexController.php(类名为Admin_IndexController)
application/modules/admin/views/scripts/index/index.phtml

除了新建模块文件之外,还需要更改配置文件application.ini,删除以下行,如果有的话:

resources.frontController.controllerDirectory = APPLICATION_PATH"/controllers"

再加上如下行:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.moduleControllerDirectoryName ="controllers"
resources.frontController.defaultModule ="default"
resources.modules[]

这样,再访问http://localhost/admin,应该就能看到admin模块输出的内容了。

如果我们要充分发挥模块的强大功能,我们还需要为模块添加一个启动文件——Bootstrap.php。它可以使得你在事个模块中方便的使用类资源,models, filters, helpers等。在admin下新建Bootstrap.php,代码如下:

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
}

并且在application/Bootstrap.php文件里加入以下方法:

protectedfunction _initAppAutoload()
{
$autoloader=new Zend_Application_Module_Autoloader(array(
'namespace'=>'App',
'basePath'  =>dirname(__FILE__),
));
return$autoloader;
}

它将会自动加载models,filters,helpers等到我们的默认模块。通过以上设置,我们就可以在接下来的controllers里使用所有这些资源了。

3、设置布局

这里主要说明如何配置不同的模块应用不同的布局,关于布局的概念和基本的用法,请参见官方文档的创建布局Zend_Layout入门

对于一般页面,你可能需要使用一个布局文件,如三行两列式,而对于admin模块,你可能需要使用另一种布局,如两列式。要达到这个目的可以采用两种方式。
第一种,布局脚本文件存放在统一的文件夹,如application/layout
可以在application下新建如下目录和文件:
application/layouts/scripts/layout.phtml
application/layouts/scripts/admin.phtml

在配置文件application.ini中添加如下几行:

resources.layout.layoutPath   = APPLICATION_PATH "/layouts/scripts"
resources.layout.layout       ="layout"
admin.resources.layout.layout ="admin"

第二种,不同模块的布局脚本文件分别存放在各自的模块文件夹下
可以在application下新建如下目录和文件:
application/layouts/scripts/layout.phtml
application/modules/admin/layouts/scripts/layout.phtml

在配置文件application.ini中添加如下几行:

resources.layout.layoutPath   = APPLICATION_PATH "/layouts/scripts"
resources.layout.layout       ="layout"
admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts"

不论是第一种还是第二种,这时如果访问http://localhost/admin,你会发现系统并没有使用期望的admin.phtml作为布局文件,而是使用了默认的layout.phtml。这是因为admin那行配置并不是系统默认能处理的有效配置,所以我们要自己来处理它。

我们新建文件:library/Rockux/Controller/Action/Helper/LayoutLoader.php,

针对第一种情况代码如下:

class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract
{
 
publicfunction preDispatch()
{
$bootstrap=$this->getActionController()
->getInvokeArg('bootstrap');
$config=$bootstrap->getOptions();
$module=$this->getRequest()->getModuleName();
if(isset($config[$module]['resources']['layout']['layout'])){
$layoutScript=$config[$module]['resources']['layout']['layout'];
$this->getActionController()
->getHelper('layout')
->setLayout($layoutScript);
}
}
 
}

针对第二种情况代码如下:

class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract
{
 
publicfunction preDispatch()
{
$bootstrap=$this->getActionController()
->getInvokeArg('bootstrap');
$config=$bootstrap->getOptions();
$module=$this->getRequest()->getModuleName();
if(isset($config[$module]['resources']['layout']['layoutPath'])){
$layoutPath=   
$config[$module]['resources']['layout']['layoutPath'];
$this->getActionController()
->getHelper('layout')
->setLayoutPath($layoutPath);
}
}
 
}

接下来我们还需要将它添加到application/Bootstrap.php里去

protectedfunction _initLayoutHelper()
{
$this->bootstrap('frontController');
$layout= Zend_Controller_Action_HelperBroker::addHelper(
new Rockux_Controller_Action_Helper_LayoutLoader());
}

再次访问http://localhost/admin,应当就可以看到使用指定的布局文件了。
如果要针对某个特定的controller使用特定的layout,可以在controller的init()方法里添加如下代码:

$layout= Zend_Layout::getMvcInstance();
$layout->setLayout('layout_special');

posted @ 2012-03-09 23:47 flashicp 阅读(190) 评论(0) 编辑

2007年10月19日

c# office不同版本下中使用Excel

1、引用:
项目:资源管理器—>引用—>添加引用—>COM—>
本例适用 office 2003.
如果是office 2000 ,请选择Microsoft Excel 9.0  Object Library 。
2、Excel保存中的异同:
 office 2003                                                                         office 2000
myWorkBooks._Open( )                                        |改为 :    .Open()
myWorkBook.SaveAs(excelPath,Missing.Value,……)  |删除一个:Missing.Value

posted @ 2007-10-19 10:34 flashicp 阅读(1101) 评论(0) 编辑

2007年10月18日

目录下的文件

1、先帖一个 ArrayList循环的使用方式:
#region/***显示表格***/

  /// <summary>
  /// 循环ArrayList, 显示ArrayList中保存的内容
  /// </summary>
  /// <param name="arr"></param>
  /// <returns></returns>
  private void  GetOutDynamicTable(ArrayList arr)
  {
   try
   {

    if(arr!=null && arr.Count>0)
    {
     System.Collections.IEnumerator myEnumerator =arr.GetEnumerator();
     while (myEnumerator.MoveNext())
     {
      DynamicTable tempTable=(DynamicTable)myEnumerator.Current;

      MessageBox.Show(this,tempTable.ID+"\n"+tempTable.FileName+"\n"+tempTable.RelativePath+"\n"+tempTable.FullPath
       ,"显示表格",MessageBoxButtons.OK,MessageBoxIcon.Error);
     }
    }
    
   }
   catch (Exception err)
   {
    MessageBox.Show(this,err.Message,"显示表格",MessageBoxButtons.OK,MessageBoxIcon.Error);
   }
   
  }

  #endregion

 2、遍历目录就能获得文件个数
// 近来发现了一个效率更高的方法,只需遍历目录就能获得文件个数,现分享一下
  //    System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(dirPath); 
  //
  //  public static int GetFilesCount(System.IO.DirectoryInfo dirInfo)
  //  {
  //   int totalFile = 0;
  //   totalFile += dirInfo.GetFiles().Length;
  //   foreach (System.IO.DirectoryInfo subdir in dirInfo.GetDirectories())
  //   {
  //    totalFile += GetFilesCount(subdir);
  //   }
  //   return totalFile;
  //  }

3、文件生成xml文档

#region

  //  /// <summary>
  //  /// 将指定目录下的子目录和文件生成xml文档
  //  /// </summary>
  //  /// <param name="targetDir">根目录</param>
  //  /// <returns>返回XmlDocument对象</returns>
  //  public static XmlDocument CreateXml(string targetDir)
  //  {
  //   XmlDocument myDocument = new XmlDocument();
  //   XmlDeclaration declaration = myDocument.CreateXmlDeclaration("1.0", "utf-8", null);
  //   myDocument.AppendChild(declaration);
  //   XmlElement rootElement = myDocument.CreateElement(targetDir.Substring(targetDir.LastIndexOf(PATH_SPLIT_CHAR) + 1));
  //   myDocument.AppendChild(rootElement);
  //   foreach (string fileName in Directory.GetFiles(targetDir))
  //   {
  //    XmlElement childElement = myDocument.CreateElement("File");
  //    childElement.InnerText = fileName.Substring(fileName.LastIndexOf(PATH_SPLIT_CHAR) + 1);
  //    rootElement.AppendChild(childElement);
  //   }
  //   foreach (string directory in Directory.GetDirectories(targetDir))
  //   {
  //    XmlElement childElement = myDocument.CreateElement("Directory");
  //    childElement.SetAttribute("Name", directory.Substring(directory.LastIndexOf(PATH_SPLIT_CHAR) + 1));
  //    rootElement.AppendChild(childElement);
  //    CreateBranch(directory, childElement, myDocument);
  //   }
  //   return myDocument;
  //  }

  #endregion


posted @ 2007-10-18 16:00 flashicp 阅读(162) 评论(0) 编辑

2007年9月30日

中秋 国庆

中秋了, 国庆了.
放假了,回家了。
 
希望一切顺心如意。大家也都节日愉快。玩疯了   呵呵。

posted @ 2007-09-30 14:52 flashicp 阅读(94) 评论(0) 编辑

2007年9月20日

最近在忙项目,好久不来

摘要: 最近在忙项目,等项目结束 ,再回来,一点点总结.预祝大家: 仲秋团圆,合家幸福! 国庆愉快!轻松度假!阅读全文

posted @ 2007-09-20 16:34 flashicp 阅读(113) 评论(0) 编辑

2007年9月5日

转 :如何提高自己的编程水平

摘要: 摘要:  1. 扎实的基础  2. 丰富的想象力  3. 最简单的是最好的  4. 不钻牛角尖  5. 对答案的渴求  6. 多与别人交流  7. 良好的编程风格  8. 韧性和毅力有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差的太远。世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。 1. 扎实的基础。数据结构、离散数学、编译原理,这些是所有计算...阅读全文

posted @ 2007-09-05 17:41 flashicp 阅读(1162) 评论(0) 编辑

2007年8月18日

衣物去污指南 转

摘要: 衣物去污指南 *衣领/袖口:将衣物先放进溶有洗衣粉的温水中浸泡15-20分钟,再进行正常洗涤。 *发黄的白袜:用洗衣粉的溶液浸泡30分钟,再进行正常洗涤。 *奶渍:用洗衣粉进行污渍预处理,进行正常洗涤,如果奶渍顽固则可能需要使用对衣物无害的漂白剂。 *普通油污:用强力洗涤剂预先进行处理,进行正常洗涤;如果允许的话,对顽固污渍还可以用漂白剂漂白。 胶类及胶性色素渍的去除方法 衣物上沾染了胶类及胶性色...阅读全文

posted @ 2007-08-18 17:19 flashicp 阅读(296) 评论(0) 编辑

洗衣小窍门集锦

摘要: 一、清洗白衣、白袜 白色衣物上的顽渍很难根除,这个时候取一个柠檬切片煮水后把白色衣物放到水中浸泡,大约15分钟后清洗即可。 二、清洗衣物怪味 有时衣物因晾晒不得当,会出现难闻的汗酸味,取白醋与水混合,浸泡有味道的衣服大约五分钟,然后把衣服在通风处晾干就可以了! 三、对付衣服上笔印 呵呵,这是几乎每个人都会遇到的: 首先将酒精倒在衣服上自来水笔的划痕上,每一道划痕上都要均匀的覆盖上酒精,酒精要选用浓...阅读全文

posted @ 2007-08-18 17:14 flashicp 阅读(669) 评论(3) 编辑

牙膏的妙用

摘要: 清洁用途 1、清除搪瓷茶杯中留下的茶垢和咖啡渍,可在杯内壁涂上牙膏后反复擦洗,一会儿就可以光亮如初。   2、水龙头下方容易留下水锈和水垢,涂上牙膏进行擦洗,很快就能清理干净。   3、用牙膏擦拭不锈钢器皿的表面,就能使其光亮如新。   4、电熨斗用久了,会在底部留下一层煳锈,可在电熨斗底部抹上少许牙膏,轻轻擦拭,即可除去。   5、银器久置不用,表面会出现一层黑色的氧化层,只要用牙膏进行擦拭,...阅读全文

posted @ 2007-08-18 12:04 flashicp 阅读(155) 评论(0) 编辑

仅列出标题  下一页

导航

统计

公告