作者: admin

  • ASP.Net获取当前运行文件的文件名称

    ASP.Net获取当前运行文件的文件名称,很简单的一条语句,留着自己以后用

    Response.Write(System.IO.Path.GetFileName(Request.Path).ToString());
    C#

  • asp.net在cs文件向aspx输出html的时候避免html编码

    asp.net在cs文件向aspx输出html的时候避免html编码

    可以使用HtmlString代替string. 如下函数:

    public HtmlString CheckCurrentNav(string nav)
    {
    	nav = nav.ToLower();
    	string currentPageName = Path.GetFileName(Request.Path).ToString();
    	if (nav == currentPageName)
    	{
    		return new HtmlString("class='active_nav'");
    	}
    	else
    	{
    		return new HtmlString("");
    	}
    }
    C#
  • 让VC编译出来的程序不依赖于运行时DLL

    让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件

    正常情况下,当我们用VC编译出一个Console/Win32类型项目的exe程序时(这里暂不考虑MFC程序),会依赖于msvcrxx.dll文件(xx为不同VC对应的版本号,VC2005为80,VC2008为90,VC2010为100),发布程序的时候,就需要把对应的dll也copy过去,比较不方便。

    通过以下的方法,可以让exe不依赖于这些dll(不过生成的exe会大很多)

    以VC2010英文版为例,切换到Solution Explorer视图,在项目上右击,选择Properties,Configuration选项选中Release,依次点击Configuration Properties->C/C++->Code Generation->Runtime Library,选择/MT即可。以Release方式重新Build项目,在Release文件夹下即可生成不依赖于msvcr100.dll的exe文件。

    下面简单说明Runtime Library四个选项的含义:

    (D表示Dll,而d表示debug版本)

    MT(Multi-threaded):多线程版本

    MTd(Multi-threaded debug):多线程调试版本

    MD(Multi-threaded Dll):多线程Dll版本

    MDd(Multi-threaded Dll debug):多线程调试Dll版本

  • MYSQL开启远程访问权限

    MYSQL开启远程访问权限,编辑my.cnf,把bind-address一行注释掉,如下图:

    在my.cnf中,把上图的这个注释掉 ( find / -name my.cnf )

    然后重启Mysql

    再执行下面的语句

    grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
    FLUSH PRIVILEGES;
    SQL

    去掉远程访问权限:

    mysql -u root -p123456
    
    use mysql;
    delete from user where host='%';
    select host, user from user;
    FLUSH PRIVILEGES;
    
    //给用户授权,所有权限
    GRANT ALL ON *.* TO 'pig'@'%';
    SQL

    对于Mysql5.7, 要注释掉my.cnf里面默认的两行代码

  • 关于.NET中 Control.Invoke

    Control.Invoke含义是将方法委托给拥有该Control的线程去执行。

    其实就是把Invoke里的内容委托给Control所在的线程去执行。如果是this.Invoke,就相当于Invoke里的内容是在主线主线程里运行的(这里默认this主窗口)

    实例代码:

    this.Invoke((EventHandler )delegate
    {
        YzmForm yzm = new YzmForm();
        yzm.SetYzm(img);
        if (yzm.ShowDialog( this) == DialogResult.OK)
        {
            this._yzm = yzm.GetYzm();
        }
    });
    C#

    对于跨线程操作UI控件很好用,可以直接在子线程中把代码委托给主线程执行。

    因为夸线程访问控件容易引起问题。所以推荐是谁创建谁调用原则。因为进度条是FORM的子控件,所以用THIS.INVOKE来委托主窗体去调用


    补充:这种方式不能在窗体构造函数中使用,会报错:在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。

    可以用下面的方式:

    public void InsertLog(string log)
    {
        if (listBoxLog.InvokeRequired)
        {
            this.Invoke( new MethodInvoker(delegate ()
            {
                InsertLog(log);
            }));
        }
        else
        {
            string t = "【" + DateTime .Now.ToString("HH:mm:ss") + "】";
            listBoxLog.Items.Add(t + log);
        }    
    }
    C#
  • firefox图片颜色不正常的解决办法

    firefox图片颜色不正常的解决办法:

    在地址栏输入:about:config

    查找gfx.color_management.mode

    把值由2改为0

    重启firefox即可

  • VC++启动进程并隐藏窗口

    VC++启动进程并隐藏窗口

    HDESK hDesk = CreateDesktop(_T("MyDesk"), NULL, NULL, 0, GENERIC_ALL, NULL);
    _ASSERT(hDesk);
    STARTUPINFO si = {sizeof(si)};
    si.lpDesktop = _T("MyDesk");
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    PROCESS_INFORMATION pi = {0};
    
    if(CreateProcess(NULL, pCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
    	HANDLE hProcess=pi.hProcess;
    	CloseHandle(pi.hThread);
    	if (WaitForSingleObject(hProcess,INFINITE)!=WAIT_FAILED)
    	{
    		DWORD dwExitCode;
    		GetExitCodeProcess(hProcess,&dwExitCode);
    		if (dwExitCode==STILL_ACTIVE)
    			MessageBox(NULL, "thread still alive !", "debug", MB_OK);
    	}
    	CloseHandle(pi.hProcess);
    	CloseDesktop(hDesk);
    }
    C++
  • li里的文章列表左右分浮动

    li里的文章列表左右分浮动

    一般思路(错误做法)

    <div>
    	<ul>
    		<li><a href="#" mce_href="#">文章标题</a>发表日期</li>
    	</ul>
    </div>
    HTML

    正确做法

    <div>
    	<ul>
    		<li>发表日期<a href="#" mce_href="#">文章标题</a></li>
    	</ul>
    </div>
    HTML

    然后利用CSS,设置“文章标题”左浮动,“发表日期”右浮动,当然实现方式有多种,样式可以定义在div里,也可以定义在ul,也可以定义在li里,亦可以在li里添加div或者span均可。正常人的思路都是:左对齐的就放在左边啦,右对刘的放右边啦!如上面代码一样

    问题出现: 在firefox等严格按照CSS反映出效果;但在IE里,这li里面的内容就不在同一行了,“发表日期”会跳到下一行里。

    解决方法: 将”发表日期”放在”文章标题”前面,这样浮动就不受影响了。

  • MFC中ToString()、Convert.ToString()、(string)、as string 的区别

    通常 object 到 string 有四种方式(假设有object obj):obj.ToString()、Convert.ToString()、(string)obj、obj as string。他们都能将 object 对象转换成 string 对象。我就讲讲他们的异同以及在实际中应该使用哪个。

    前两个方法通常是由别的对象得到 string 对象,它们间的区别只表现在要转换的对象为 null 时,如果 obj 为 null,调用 obj.ToString 方法会导致 NullReferenceException 异常,调用 Convert.ToString 不会抛出异常而返回一个 null。

    用强制转换(string)obj 要求 obj 的运行时类型必须是 string。如果不是,就会抛出异常。

    用 as 方法则会相对平稳,当 obj 的运行时类型不是 string 时会返回 null 而不抛出异常。

    所以在通常在我们需要得到某个对象的 string 表达形式时,我们应该使用 ToString 和 Convert.ToString,这时候你就得根据情形选一个,假如你能保证你的对象不为 null,则两个差不多。如果有可能为null,你就应该用 Convert.ToString,如果你希望它为 null 的时候抛出异常,那么当然可以选择 ToString。

    编者注:

    这里是说 object 到 string,如果在其它类型上调用第一种 ToString(),得到的不一定是实际的内容,可能是对该类的描述,这取决于该类如何实现ToString() 方法

  • delphi fastreport 预览出错

    错误信息 statement expected,but expression of type ‘TfrxCustomPreview’found

    解决办法:

    frxReport1.Preview 只是指定frxReport1 的 preview 控件,
    调用frxReport1 的预览应使用 frxReport1.showReport;