随笔分类 - c# winform
摘要:今天把一个网站登录配置到以前写的蜘蛛程序中,发现不能成功登录。检查后才发现,那个网站在登录成功后,输出了一个特殊路径的 Cookie,由于是使用 HttpWebRequest.Cookies 来获取的 Cookie,默认是获得当前路径相关的 Cookie,里面少了那个特殊的 Cookie,查了半天资料,也没有一个好的解决办法。最后采用 HttpWebResponse.Headers["Set-Cookie"] 来获得所有的 Cookie 字符串,然后写一段代码把这些 Cookie 字符串转换到 CookieCollection 中,解决了问题,以下是部分代码:#region
阅读全文
摘要:当IE浏览器遇到脚本错误时浏览器,左下 角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框。当我们使用 WebBrowser控件时有错误信息框弹出,这样程序显的很不友好,而且会让一些自动执行的程序暂停。我看到有人采取的解决方案是做一个窗体杀手程序来 关闭弹出的窗体。今天探讨的方法是从控件解决问题。1、SHDocVw.dll 在COM时代我们使用的WebBrowser控件是SHDocVw.dll。屏蔽错误信息的方法很简单使用下面的一句就可以搞定。view plaincopy to clipboardprint?WebBrowser1.Silent = true; We
阅读全文
摘要:【实例简介】 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码【实例截图】 【核心代码】execScript方式: 12345678910111213141516171819202122232425262728293031323334353637using mshtml;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;usi...
阅读全文
摘要:文件上传是日常开发中经常遇到的,文件上传用的最多的当然是上传控件file了,一个form表单,其中有一点就是form表单的enctype属性设置为multipart/form-data,呵呵,这个在所有关于文件上传的文章中都有提示,长话短说,下面进入正题 对于控件的赋值和取值就不用说了,地球人都知道。但是其中有个上传控件,即类型为file的input,这个东东是个只读的,什么意思呢?简而言之就是可以读取他的value,但是不能直接给他赋值,没错,是不能直接给 他赋值,呵呵,当然有的人干脆说不能给他赋值(其实是可以通过其他办法给他赋值的)。关于这个给file控件赋值的文章,百度一下有网上一大把,
阅读全文
摘要:我在webBrowser1_DocumentCompleted不停被调用里写了些代码,用于填写一个表单,并向服务器提交。但是webBrowser1_DocumentCompleted不停被调用,页面不停被刷新,不知道什么原因。网上找了找,有类似问题:比如这么一篇文章如何解决WebBrowser.DocumentCompleted事件的多次调用 (http://www.cnblogs.com/rchlz/archive/2009/02/27/1399274.html)我用了这篇文章中第三个方法,就是在执行完我的代码之后,把webBrowser1_DocumentCompleted卸载掉,呵呵,很
阅读全文
摘要:摘要1.是什么导致我们需要提供一个自定义的消息框?2.说说我的大致思路3.你的亮点在哪里?4.难道就是这些吗?下载本文讲述的项目源码包是什么导致我们需要提供一个自定义的消息框?最初产生这样一个需求是源于项目经理的近乎白痴般的要求,有一天,他告诉我说那个弹出来的消息框太小了。我告诉他,这是系统自带的东西,大小随着给定文本内容的长度自动变化,他说不行,给弄大点,而且字体也太小,换个字体吧!我的天,难道架构师都是从来不真实写代码的吗?接 到这个要求,想想也许不大难吧。先看看系统给了我什么接口:MessageBox位于System.Windows.Forms命名空间内,是一个被密封了的静态类,能够使用
阅读全文
摘要:先上图:这里添加固定的图片的。代码:privateColorRowBackColorAlt=Color.FromArgb(200,200,200);//交替色privateColorRowBackColorSel=Color.FromArgb(150,200,250);//选择项目颜色publicForm1(){InitializeComponent();listBox1.DrawMode=DrawMode.OwnerDrawFixed;listBox1.ItemHeight=24;}privatevoidlistBox1_DrawItem(objectsender,DrawItemEvent
阅读全文
摘要:#(winform)中ComboBox和ListBox添加项完全解决刚开始用.net 的winform开发,发现好些控件都很难用,可能是不熟悉的原因吧,这不,一个给ComboBox添加项的问题就搞的我很头疼,我要同时给一个项添加名字和值,怎么都没法加,查了查资料,又自己汇总测试了下,终于全部搞定了,现把完整的方案写下。用comboBox的数据绑定的方法很简单,建一个数据源,绑定到ComboBox上,然后指定DisplayMember和 ValueMember就可以了。但是感觉好不灵活哦,如果我要在ComboBox上再添加一项,那怎么办?Web里面有ListItem, winform里面怎么没有
阅读全文
摘要://重写ProcessCmdKey的方法protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData) { int WM_KEYDOWN = 256; int WM_SYSKEYDOWN = 260; if (msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN) { switch (keyData) { ...
阅读全文
摘要:(1)判断文件夹是否存在:DirectoryInfo类用于复制、移动、重命名、创建和删除目录等典型操作。用Directory类的Exists方法可以简单快速的判断文件夹是否存在,参数是文件的路径。返回值是Boolean型。返回True说明文件夹存在,返回False说明文件夹不存在。例如,判断E盘下是否存在名为soft的文件夹。代码如下所示:Directory.Exists("E:\\soft");(2)创建文件夹:通过DirectoryInfo类的Create方法可以方便地创建文件夹。参数是将要创建的文件夹路径。返回值是一个由参数指定的DirectoryInfo对象。本例演
阅读全文
摘要:private void Form1_FormClosing(object sender, FormClosingEventArgs e){if (MessageBox.Show("你确定要退出本系统吗?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK){Application.ExitThread();}else { e.Cancel = true;}}
阅读全文
摘要:在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示元,必要进,还要控制后台线程中断当前操作。以前,类似的应用会比较麻烦,需要写的代码较多,也很容易出现异常。在 .net中,提供了一个组件 backgroundworker就是专门解决这个问题的。使用这个组件其实非常简单,例如,我们做一个类似如下界面的进度条的小例子,在后台线程中进行耗时运算,同时刷新界面上的滚动条和提示信息,运行结束后,弹出处理结果。在界面上拖入backgroundWorker组件
阅读全文
摘要:c# 搜狐 腾讯 都是这样。。。新浪可以我试了一下,继检查,是搜狐的内容经过了GZIP压缩,报以才出现你这样的问题。具体解决方法如下:System.Net.WebClient wc = new System.Net.WebClient();wc.BaseAddress = "http://www.sohu.com";//注意,new GZipStream。。。这一句是解决问题的重点,需要引用命名空间 System.IO.Compression; using (System.IO.Stream objStream = new GZipStream(wc.OpenRead(&q
阅读全文
摘要:无论使用任何语言做模拟登陆或者抓取访问页面,无外乎以下思路:第一 启用一个web访问会话方法或者实例化一个web访问类,如.net中的HttpWebRequest;第二 模拟POST或者GET方式提交的数据;第三 模拟请求的头;第四 提交请求并获得响应,及对响应做我们所需要的处理。这里我们以人人网的登录为例,将涉及到POST以及GET两种请求方式。在之前的文章《免费网页抓包工具,火狐插件FireBug的抓包使用教程》中我们知道,登陆人人网的时候,一共做了一个POST请求以及两个GET请求,如下图:观察这三个请求的详细信息,不难看出第一个GET请求的地址可以由POST的响应得到,而第二个GET请
阅读全文
摘要:这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现。在很多地方都需要验证用户身份才可以进行下一步操作,这就免不了POST请求来登录,在实际过程中发现有些网站登录是HTTPS形式的,在解决过程中遇到了一些小问题,现在跟大家分享。通用辅助类下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebResponse对象,有了返回的HttpWebResponse实
阅读全文
摘要:DateTime dt = DateTime.Now; Object none = System.Reflection.Missing.Value; Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application(); Microsoft.Office.Interop.Word.Document document = wordApp.Documents.Add(ref none, ref none, ref none, ref none); //设置文档 ...
阅读全文
摘要:做项目的时候 需要一些设置数据例如: 部门 人员 客户 行业 等等 我一般喜欢将这些数据 缓存到客户端一般使用Dataset 缓存数据当缓存数据比较大的时候 (6000条以上)我一般是使用DataView 的 rowfilter 根据条件过滤缓存数据 获取合适的条目数据量大的时候 发现速度比较慢(以前没有注意到)经过几次试验 解决办法如下:1. 使用DataTable.Select() 方法 比用DataView 的 rowfilter 要快一些2. 使用HashTable 保存数据 (这个性能非常快 适合键值对形式的缓存数据) using System.Collections; Hashta
阅读全文