2010年7月19日 星期一

Form.GotFocus And Form.LostFocus 失效?

原本自訂了一個繼承Control的元件後將他加到Form裡面
發現Form的GotFocus and LostFocus事件就失效了
本來以為是自己的元件中是不是有些什麼奇怪的code
結果簡單的測試了一些公規的元件,發現一樣有這個問題

失效的有 Control, TextBox, Button
正常的有 PictureBox, Label

解決的辦法如下
this.SetStyle(System.Windows.Forms.ControlStyles.Selectable, false);
在自己的元件的建構內加入上面那行code
如果用的是公規元件的話,那就只好用繼承的方式處理了

2010年3月14日 星期日

C#自訂型態的強制轉換

我們常看到基本資料型態的強制轉換,如下:
int i = (int)123.456;


如果今天我們分別自訂了兩個無任何繼承關係的類別
要如何達成強制轉換呢?

ClassA x = new ClassA();
ClassB y = (ClassB)x;

在C#中可以使用implicit operator關鍵字來達成

這裡舉個簡單的例子,兩個類別的定義如下

class ClassA
{
 public int Amount = 0;
 public ClassA(int amount) { this.Amount = amount; }
}

class ClassB
{
 public string Content = string.Empty;
 public ClassB(string content) { this.Content = content;}
}

下面要示範的是,當ClassA強轉成ClassB時
ClassB.Content的字串,會是ClassA.Amount數個英文字母
假設ClassA.Amount等於10,則強轉後ClassB.Content會等於ABCDEFGHIJ

在ClassB中加入以下程式碼

public static implicit operator ClassB(ClassA obj)
{
 int amount = 0;
 if (obj.Amount > 26 || obj.Amount < 0)
  throw new Exception("out of range");
 else
  amount = obj.Amount;

 StringBuilder sb = new StringBuilder();
 for (int i = 0; i < amount; i++)
  sb.Append((char)(67 + i));
 ClassB result = new ClassB(sb.ToString());
 return result;
}

現在我們可以執行強轉了

static void Main(string[] args)
{
 ClassA a = Class(10);
 ClassB b = (ClassB)a;
 Console.WriteLine(b.Content);
 Console.Read();
}

在Blogger中加入程式碼區塊(使用SyntaxHighlighter )

資訊主頁版面配置修改HTML
</body>標籤之前加入下方程式碼,然後儲存範本


<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shCore.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushAS3.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushBash.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCpp.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushColdFusion.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCSharp.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCss.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushDelphi.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushDiff.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushErlang.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushGroovy.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJava.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJavaFX.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJScript.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPerl.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPhp.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPlain.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPowerShell.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPython.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushRuby.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushScala.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushSql.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushVb.js"></script>

<script type="text/javascript"
src="http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushXml.js"></script>

<link type="text/css" rel="stylesheet"
href="http://alexgorbatchev.com/pub/sh/2.1.364/styles/shCore.css"/>

<link type="text/css" rel="stylesheet"
href="http://alexgorbatchev.com/pub/sh/2.1.364/styles/shThemeDefault.css"/>

<script type="text/javascript"> SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/2.1.364/scripts/clipboard.swf';

SyntaxHighlighter.config.bloggerMode = true;

SyntaxHighlighter.all();

</script>





之後在建立新文章便可以使用程式碼區塊了,使用方式如下:
新文章➝切換到修改html,加入程式碼 。(ps.發布文章後才會正確顯示)




<pre class="brush: language;">
// 欲顯示的程式碼
</pre>



language的部分就是想要顯示的語言,可用下表對應名稱替換


語言名稱對應名稱
ActionScript3 as3, actionscript3
Bash/shell bash, shell
ColdFusion cf, coldfusion
C# c-sharp, csharp
C++ cpp, c
CSS css
Delphi delphi, pas, pascal
Diff diff, patch
Erlang erl, erlang
Groovy groovy
JavaScript js, jscript, javascript
Java java
JavaFX jfx, javafx
Perl perl, pl
PHP php
Plain Text> plain, text
PowerShell ps, powershell
Python py, python
Ruby rails, ror, ruby
Scala scala
SQL sql
Visual Basic vb, vbnet
XML xml, xhtml, xslt, html, xhtml



如下:以C#作為顯示語言



<pre class="brush: c-sharp;">

class CTest

{

class CTest() { }

}

</pre>


2010年1月25日 星期一

Exception 訊息

在.Net中Thread若跳出Exception,則無法在Main Thread中使用try catch攔截,此時會跳出
如果希望截取Thread的Exception可使用
AppDomain.CurrentDomain.UnhandledException 事件
-----------------------------------------------------------------
若是呼叫由C/C++所寫的API而發生Exception,則會跳出

2009年12月15日 星期二

這樣的夢是有什麼暗喻嗎? 希望不是壞事才好

今天居然夢見ㄚ公,ㄚ公在15年前就過世了,我記得只有一次或從來沒夢見過他

夢裡,他從一個臺階上走下來,因為臉上的皺紋變得更多,看起來更老了
就像是8~90歲該有的樣子,但身體依然硬朗

他用一個喉嚨中似乎有痰的低沉聲音說了一聲:ㄚ翰阿
然後我看了一下左手邊,ㄚ嬤躺在那裡側臥著睡覺
接著ㄚ公對我說:那邊有一粒西瓜,拿去剖一剖

我看了一下我的右手邊,有一個平台上面放了一顆大西瓜
那顆西瓜大概長50公分直徑30公分左右,我上了前去看一看
然後將那西瓜往自身的方向轉了一下,發現西瓜已經被橫切了一片起來
(一般正常情況下我們會順著西瓜心的方向下去切),看了一下旁邊已經有幾片西瓜切起來放在那了。黃色的肉,是小玉西瓜,好大一顆的小玉西瓜,從沒看過這麼大的。

接著聽到阿公說:那邊有刀子

我轉過身後發現ㄚ嬤不見了,應該進去屋子裡面睡了吧!
往ㄚ公所說的方向走去,看見了一把短短可摺疊收納的刀子
刀身的長度就只有普通訂書機的長度。正在想說這麼小的刀子該怎麼切,轉過頭準備要問ㄚ公的時候,發現ㄚ公坐在那跟一個人聊天。

看了一下原來那個人也是ㄚ公,是6~70歲的ㄚ公,年輕的ㄚ公跟老的ㄚ公在互相對話,當我在計算我揪竟有幾個ㄚ公的時候,才猛然驚覺他們是同一人,不同時空的ㄚ公居然再互相交談

就當我覺得很神奇的情況下...夢醒了

2009年11月8日 星期日

ubuntu 9.10 開機啟動 number lock (Num Lock)

這裡有教學


但是在 /etc/X11/ 底下已經找不到gdm資料夾,因為他被移至到 /etc/底下
因此在終端機中操作順序如下:
sudo apt-get install numlockx //先安裝numlockx這個小程式,用來開關number lock
sudo cp /etc/gdm/Init/Default /etc/gdm/Init/Default_backup //此行只是為了備份可有可無
sudo gedit /etc/X11/gdm/Init/Default //編輯Default設定檔

然後在此文字檔中找到exit 0這一行,將以下文字加到此行之前,儲存後重新開機即可

if [ -x /usr/bin/numlockx ]; then
/usr/bin/numlockx on
fi