一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Programming Language

C#中父窗口和子窗口之间实现控件互操作

目前常见的有两种方法,基本上大同小异 : 第一种: 在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如: public   static   yourMainWindow   pCurrentWin   =   null; 然后在主窗体构造函数中,给静态成员初始化,如下: pCurrentWin   =   this; 那么在子窗体中调用父窗体,可以通过“主窗体类名.   pCurrentWin”来操作当前的主窗体。   第二种: 是在子窗体中定义一个私有成员,来保存当前主窗体对象,例如: private yourMainWindow pParentWin = null; 然后在子窗体构造函数中,加一参数,如下: public yourChildWindow( yourMainWindow WinMain ) {  pParentWin = WinMain;  //Other code }  在主窗体创建子窗体的时候,要把this作为参数来构造子窗体,这样在子窗体中调用父窗体,可以直接用“this.pParentWin”就可以了   不过以上所述的两种方法,只是让你能够访问当前主窗体对象,那么如何操作控件,很多人直接修改控件的成员访问符,即把“private”改为“public”,我觉得这样破坏了本身类的封装,所以我比较喜欢的做法是为控件增加公有属性或方法来供调用,例如: public string ButtonText {  get{ return btn.Text;}  set{ btn.Text = value;} } public void Button_Click() {  this.btnDConvert.PerformClick();//Execute button click } 

龙生   26 Mar 2011
View Details

winForm开发集锦

禁止Form窗口调整大小方法:FormBorderStyle 设为FixedSingle; 不能使用最大化窗口: MaximuzeBox 设为False; 不能使用最小化窗口:   MinimizeBox 设为False; 禁止combobox输入方法:将DropDownStyle 设为DropDownList 待续……

龙生   26 Mar 2011
View Details

Xml和DataSet互操作类

using System;using System.Data;using System.Xml; //***************************************// 作者: yangtang_newton//其实用DataSet操作XML,归根到底就是对DataSet里的表格,行,列等进行操作,//然后用DataSet里的东西重新写到XML中,从而实现编辑XML的目的。如果再配合上.xsd文件的话,那效果更佳。//xsd生成方法:xsd file.xml [/outputdir:directory] [/parameters:file.xml] //*************************************** namespace USTC{/// <summary>/// OperateXmlByDataSet 的摘要说明。/// </summary>public class XmlDataSet{private string strXmlPath;//这个是相对路径public XmlDataSet(string strXmlPath){  //  // TODO: 在此处添加构造函数逻辑  //  this.strXmlPath=strXmlPath;} #region GetDataSetByXml/// <summary>/// 读取xml直接返回DataSet/// </summary>/// <param name="strXmlPath">xml文件相对路径</param>/// <returns></returns>public DataSet GetDataSetByXml(){  try  {  DataSet ds = new DataSet();    ds.ReadXml(GetXmlFullPath(strXmlPath));  if(ds.Tables.Count > 0)  {  return ds;  }  return null;  }  catch(Exception)  {  return null;  }}#endregion /*  *  以下代码读取到一个没有排序和筛选的DataSet。       USTC.XmlDataSet XML=new XmlDataSet(@"XML/PortalCfg.xml");DataGrid1.DataSource = XML.GetDataSetByXml();DataGrid1.DataBind();//以下代码读到的数据是经过筛选和排序的:DataGrid1.DataSource =XML.GetDataViewByXml("name = 'Asp.net’", //条件:name列值为Asp.net"peopleNum desc"); //按peopleNum列降序排列DataGrid1.DataBind(); */ #region GetDataViewByXml/// <summary>/// 读取Xml返回一个经排序或筛选后的DataView/// </summary>/// <param name="strXmlPath"></param>/// <param name="strWhere">筛选条件,如:"name = […]

龙生   13 Feb 2011
View Details

C# DataSet,ListView和XML文件互操作的例子

DataSet和XML文件互操作的例子 //读取XML文件到DataSetDataSet ds = new DataSet();MyXmlPath = "C:\\Message.xml";FileStream fs = new FileStream(MyXmlPath, FileMode.Open);ds.ReadXml(fs, XmlReadMode.ReadSchema);fs.Close();//筛选行存入DataSetDataRow[] FoundRows;string Expression = "AREA IN ('" + Area + "',")";string SortOrder = "DAY DESC";FoundRows = ds.Tables[0].Select(Expression, SortOrder);DataTable Mydt = new DataTable();Mydt.Columns.Add("FKEY");Mydt.Columns.Add("IIIII");Mydt.Columns.Add("NAME");Mydt.Columns.Add("AREA");Mydt.Columns.Add("X");Mydt.Columns.Add("Y");Mydt.Columns.Add("BKIND");Mydt.Columns.Add("SKIND");Mydt.Columns.Add("DAY");Mydt.Columns.Add("ETIME");Mydt.Columns.Add("TYPE");Mydt.Columns.Add("MAIN");Mydt.Columns.Add("TTIME");foreach (DataRow dr in FoundRows){Mydt.Rows.Add(dr.ItemArray);}DataSet Myds = new DataSet();Myds.Tables.Add(Mydt);//保存到XML文件Myds.WriteXml(MyXmlPath, XmlWriteMode.WriteSchema); //ListView的一个例子XmlDocument doc = new XmlDocument();XmlDeclaration Declaration = doc.CreateXmlDeclaration("1.0","GB2312","");doc.AppendChild(Declaration);XmlElement xe = doc.CreateElement("Infos");doc.AppendChild(xe);for(int i = 0;i < listview.Items.Count;i++){XmlNode parent = doc.CreateElement("Info" + i.ToString());ListViewItem temp = listview.Items[i];for(int j = 0;j < temp.SubItems.Count;j++){string s = temp.SubItems[j].Text;XmlNode node = doc.CreateElement(s);node.InnerText = s;parent.AppendChild(node);}doc.AppendChild(parent);}doc.Save(FilePath); 

龙生   13 Feb 2011
View Details

在C#中编写多线程应用程序

以前在使用VB来实现多线程的时候,发现有一定的难度。虽然也有这样那样的方法,但都不尽人意,但在C#中,要编写多线程应用程序却相当的简单。这篇文章将作简要的介绍,以起到抛砖引玉的作用! .NET将关于多线程的功能定义在System.Threading名字空间中。因此,要使用多线程,必须先声明引用此名字空间(using System.Threading;)。 即使你没有编写多线程应用程序的经验,也可能听说过“启动线程”“杀死线程”这些词,其实除了这两个外,涉及多线程方面的还有诸如“暂停线程”“优先级”“挂起线程”“恢复线程”等等。下面将一个一个的解释。 1.启动线程 顾名思义,“启动线程”就是新建并启动一个线程的意思,如下代码可实现: Thread thread1 = new Thread(new ThreadStart( Count)); 其中的 Count 是将要被新线程执行的函数。 2.杀死线程 “杀死线程”就是将一线程斩草除根,为了不白费力气,在杀死一个线程前最好先判断它是否还活着(通过 IsAlive 属性),然后就可以调用 Abort 方法来杀死此线程。 3.暂停线程 它的意思就是让一个正在运行的线程休眠一段时间。如 thread.Sleep(1000); 就是让线程休眠1秒钟。 4.优先级 这个用不着解释了。Thread类中有一个ThreadPriority属性,它用来设置优先级,但不能保证操作系统会接受该优先级。一个线程的优先级可分为5种:Normal, AboveNormal, BelowNormal, Highest, Lowest。具体实现例子如下: thread.Priority = ThreadPriority.Highest; 5.挂起线程 Thread类的Suspend方法用来挂起线程,直到调用Resume,此线程才可以继续执行。如果线程已经挂起,那就不会起作用。 if (thread.ThreadState = ThreadState.Running) { thread.Suspend(); } 6.恢复线程 用来恢复已经挂起的线程,以让它继续执行,如果线程没挂起,也不会起作用。 if (thread.ThreadState = ThreadState.Suspended) { thread.Resume(); } 下面将列出一个例子,以说明简单的线程处理功能。此例子来自于帮助文档。 using System; using System.Threading; // Simple threading scenario:  Start a static method running // on a second thread. public class ThreadExample { // The ThreadProc method is called when the thread starts. // It […]

龙生   08 Jan 2011
View Details

线程间操作无效: 从不是创建控件 [控件名称] 的线程访问它

我现在正在使用vs2010英文版,平常也很少看那些有的没的文字,而且在写程序的时候很”明智”的异常捕获并且写进日志里去,所以没有出现那个可爱的调试状态下出现异常的那个小框框. 我在上网查了一会儿,有人说直接设置控件的CheckForIllegalCrossThreadCalls属性为false,但是因为可能的不安全因素所以还是不用的好.当然还有写一个委托来同步调用.但是我觉得它有点麻烦,就放弃用委托同步了. 后来我搞了好多种写法,都摆脱不了这个怨念,最终也摆脱了异常捕获并抛出了这个小框框. 框框上明确的说道:”线程间操作无效: 从不是创建控件 [控件名称]  的线程访问它。”但是在框框的Suggestion列表中显示出了一条项目,大意是:”如何:对 Windows 窗体控件进行线程安全调用.”,我点开它,并且跳进了MSDN. 原来在MSDN上就有教咱如果夸线程操作控件啊.亏我还Google半天呢. MSDN上的办法就是使用委托来同步调用控件的.具体方法我也就不卖关子了.因为MSDN上的代码比较繁多,所以我稍微改进了一下. //首先声明一个委托. delegate void SetValueDelegate(int val);    //模仿程序中的跨线程调用 public void Progress() {     Thread t = new Thread(() =>         {             //跨线程由此开始             SetValue(100);         });     t.Start(); }    //关键部分在这里 public void SetValue(int val) {     //InvokeRequired属性当非创建本控件线程操作的时候     //它返回true,此时使用窗体(该控件的创建者)的Invoke方法创建同步调用.     //妙哉,妙哉!     if (ProgressBar1.InvokeRequired)     {         var svd = new SetValueDelegate(SetValue);         this.Invoke(svd, val);     }     else     {         ProgressBar1.Value = val;     } } 好了,就是这样,非讨论文章就越精炼越好.希望能帮到你. 最后附上MSDN的地址:这里

龙生   08 Jan 2011
View Details

去掉ecshop2.7.0底部版权Powered by ecshop

  在ecshop2.7.0开始,底部版权Powered by ecshop如果删除了之后,就会发现Powered by ecshop到处乱跑,如何彻底删除Powered by ecshop版权呢。首先,需要打开js/common.js删除以下js函数. onload = function(){    var link_arr = document.getElementsByTagName(String.fromCharCode(65));    var link_str;    var link_text;    var regg, cc;    var rmd, rmd_s, rmd_e, link_eorr = 0;    var e = new Array(97, 98, 99,                      100, 101, 102, 103, 104, 105, 106, 107, 108, 109,                      110, 111, 112, 113, 114, 115, 116, 117, 118, 119,                      120, 121, 122                      );   try  {    for(var i = 0; i < link_arr.length; i++)    {       link_str = link_arr[i].href;      if (link_str.indexOf(String.fromCharCode(e[22], 119, 119, 46, e[4], 99, e[18], e[7], e[14],                                              e[15], […]

龙生   14 Dec 2010
View Details

SQLHelper.cs(SQLServer版)

 

龙生   12 Dec 2010
View Details

PHP+Access乱码问题解决办法

    由于最近在改版一个PHP的网站程序,但原网站使用的是ASP+Access,所以要把Access数据库中的记录全部转换到Mysql中,并且新的网站所有页面使用的都是UTF-8的编码格式,于是就有了现在的问题。     不过问题终于还是在10分钟内得到解决了。先上代码: <?php$connstr="DRIVER=Microsoft Access Driver (*.mdb);DBQ=".realpath("wenxue.mdb"); $connid=odbc_connect($connstr,"","",SQL_CUR_USE_ODBC); $query=odbc_do($connid,"select top 1 * from articles");  while(odbc_fetch_row($query)){  for($i=0;$i<4;$i++){   $record1[$i] = odbc_result($query,$i+1);   echo iconv('gb2312′,’utf-8',$record1[$i]);  echo " ";  }  echo "<br>"; } ?>       其实,PHP连接Access数据库的方法有很多,这里只是其中的一种。重要的是解决乱码问题,也就是iconv方法的使用(文中的粗体)。 转自:http://neville.liu.blog.163.com/blog/static/4993878120096279929917/

龙生   10 Dec 2010
View Details

ecshop文件夹结构说明

 

龙生   08 Dec 2010
View Details
1 173 174 175 177