顯示具有 Windows Form 標籤的文章。 顯示所有文章
顯示具有 Windows Form 標籤的文章。 顯示所有文章

2012年3月21日 星期三

與使用者控制項的激戰系列 第二彈 ListBox MouseHover Select 事件

一般的ComboBox展開下拉選單後 會隨滑鼠移動反白項目

但是ListBox沒這能力

自己寫

要點在於是用MouseMove事件

效果同ComboBox

2012年3月20日 星期二

超好用又超難用的 BindingSource

BindingSource 好用的地方 在於查詢完 結果丟進去 什麼鬼控制項都能跟他Binding一起 又有好用的position讓你上上下下

但是當你想要效仿datagridview從中抓ColumnName啦 抓Row啦 抓Items啦之類的東東之時 你會發現

但是本人就是想這麼幹,BindingSource丟給datagridview它讀的懂,自然沒道理無法直接拆解來用

使出第一百零一招 請出好朋友估狗 未果 查到的不是火星文 就是沒關係的東東

只好亂打嘗試錯誤法 + 偵錯

偵錯的結果果然有法子在某個地方找到想要的東東

上圖是誤導的 沒藏那麼深 -.-

解答是被包裝成DataView 先轉型在從中foreach即可

2012年3月17日 星期六

網頁控制技術 記錄備忘

以應用程式來對網頁進行取值 控制 操作 自古以來本人就略感興趣

抓值的話一開始什麼都不懂直接拿整份HTML文件自己寫迴圈解析字串

但是HTML又非人人以標準撰寫 所以時而可行時而失敗

直接對網頁作控制更是百思不得其解

寫程式的莫非定律 - 你想不到的別人未必想不到 你想得到的別人都已經想到了 =3=

咕狗老師教教我 立刻就給我回答了 還省下一條肉乾當束脩

式門遁甲 - (C#)用WebBrowser控制項寫網頁抓取程式之一些心得

一個webBrowser 一個button

button按下

與使用者控制項的激戰系列 第一彈 Form標題click事件

外表看似簡單 難度卻異於常人 的控制項comboBox

comboBox本身當然沒什麼好難的

但是如果想要用 TextBox + ListBox + Button 硬是湊成一個偽comboBox卻沒想像簡單

光是標題就是難題了

什麼意思呢? 舉例來說這是一個comboBox展開下拉的狀態

如果這時候點了Form標題 他就把下拉選單收合起來

那好了要怎麼在Form觸發點擊標題的事件?

事實上的答案就是 - 辦不到

因為打內法蘭克先生根本沒處理標題的事件

預設form的mousedown mouseup mouseclick事件 也都是在點擊標題列下面的區域才能觸發 與標題無關

此時膜拜csdn

http://topic.csdn.net/u/20091015/11/56540da1-3c57-487f-9f31-2e1c60c1813c.html

四樓表示這裡都是都是放牛的人 十分牛B

 

 

 

 

以下備忘記錄



        private void Form1_Load(object sender, EventArgs e) {
            this.TitleClick += new EventHandler(Form1_TitleClick);
        }

        void Form1_TitleClick(object sender, EventArgs e) {
            listBox1.Visible = false;

        }

        /// <summary>  
        /// 消息处理  
        /// </summary>  
        /// <param name="m"></param>  
        protected override void WndProc(ref Message m) {
            //系统消息
            if (m.Msg == 0x0112 && m.WParam.ToInt32() == 61458) {
                if (TitleClick != null) TitleClick(this, null);
            }
            base.WndProc(ref m);
        }
        public event EventHandler TitleClick;


2012年2月19日 星期日

一秒看破ComboBox 繫結

不只ComboBox 很多控制項都可以跟資料繫結

繫結的東東是 查詢完結果的資料集 (就是可以放到 XXX.DataSource = 右邊的東東)

然後把ComboBox的屬性設一設 他就會跟他繫結

請參照ADO.NET 魔術化的VS工具 - Combox繫結

你就會有以下效果

但是如果你希望你的ComboBox不只看得到name 也要看到id 或者其他欄位 怎辦?

像是
1.AAA
2.BBB
3.CCC

你會發現你無論如何 DisplayMember 或者 ValueMember 都只能挑這資料集的一個欄位

X,那不然就用2個ComboBox 一個裝name 一個裝id 再用foreach合體字串 再用foreach items.add 再...

當然可以,而且顯然方法百百種都可以達成,只是那就失去使用控制項資料繫結的便利性了

使用控制項資料繫結,只要將查詢完的資料指定給ComboBox 的DataSource 就可以免除寫items.add迴圈

既然要ComboBox Display 複數Member 很麻煩做的話 換個角度思考 把查詢結果直接便成最終格式就好了

使用T - SQL

生個新方法

搞定

2012年2月17日 星期五

typed dataset 查複合表的問題

如果你是用typed dataset 來查join起來多對多的表 你會失敗 會看到無法啟用條件約束。一或多個資料列的值違反非 Null、唯一或外部索引鍵條件約束

即使你的T - SQL完全正確 而且查詢器確實查到資料了 你還是會失敗

經實驗發現因為它自以為是"強"型別 所以每個TableAdapter裡面都必須有主鍵 但是預設建立的TableAdapter如下,只有一把鑰匙

但是因為是join出來的複合表 所以這把假鑰匙自然重複 它便自作聰明的認為違反條件約束

手動以複合鍵來表示該表的唯一值即可 效果如下

2012年2月14日 星期二

windows form application 對資料庫用武器 - DaTa FeeDer Ver 2.0

改版囉 修正一些不便之處 選取一行,不論資料幾萬筆都能把一行選起來,不用捲軸拉半天。

清空選取,選到的直接清空,不用在一格一格按空白。

先天限制須要相同列數才能複製資料,現在也能以迴圈達成。 按下"相同列數"前

按下"相同列數"後

按下"載入全部"後

以實例將比利先生的財報資料 15854筆資料 整理正規回存DB

http://myweb.hinet.net/service/download.html?http://mayhround.sg1007.myweb.hinet.net/downloads/datafeeder%20V2.rar

2012年2月5日 星期日

windows form application 對資料庫用武器 - DaTa FeeDer

對付惡魔 需要 對惡魔武器

對付資料庫亦同 於是 對資料庫用武器 - DaTa FeeDer 誕生

在程式設計的過程中,資料庫面臨的最大的麻煩是什麼呢?

正規化? NO

表格設計? NO

拉FK FK? NO

是餵資料進去測試的時候呀 ˊ3ˋ

再加上每人負責一部分 每人測自己的資料 那合體的時候怎辦

資料庫可以整個卸載 複製 附加 還是要 備份 復原 神馬的 都很簡單

但是要怎麼把部分有資料的表 合併到一個資料庫裡呢

難道當初A員不吃不喝不睡 花了幾天 手打KEY IN進的資料 要再KEY一遍?

試試 對資料庫用武器 - DaTa FeeDer 吧

照慣例圖解:

整體介面

 

 

會自動抓你電腦裡的資料庫有什麼

 

 

讀取表格後,右邊中央是編輯區

 

 

上面那區則是欄位的資訊

 

 

按下匯出XML即可把表格內的資料都存成XML檔

 

 

點下面的rank.xml,剛剛匯出的XML檔再右下角展示,確實已將rank表格複製起來

 

 

按下開啟資料夾,即可看到匯出XML的資料夾

 

 

以記事本打開就會看到XML的內容

 

 

惡搞一下,把編集區的rank_name都刪除,按下存回資料庫,以Management檢視,確實已刪除

 

 

按下載入編輯區,把原先備份到XML的資料再丟回編輯區,按下存回資料庫,按下存回資料庫,以Management檢視,確實已回復

 

 

不同行也能填入,選取「相同型態」的欄位,且格數須相等,按下載入選取

 

 

先前選取的資料已覆蓋編輯區選取的資料

 

 

http://mayhround.myweb.hinet.net/downloads/datafeeder.rar

2012年1月7日 星期六

C# 皮克丘霸克斯的移動

繼上次我"意思到了"做出龍抓手游標之後

"我期待"能移動pictureBox了

今次終於動了

而且簡單到匪夷所思


http://www.youtube.com/watch?v=o0Wvn-9BXVc

截圖老半天游標都無法入鏡 而且也沒法表現出真的能"動" 只好祭出HTC的蒐證功能


 private MouseEventArgs MouseStartPos = null;
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
            if (e.Button == MouseButtons.Left) {
                MouseStartPos = e;
                pictureBox1.Cursor = new Cursor(new Bitmap(Resources.Catch).GetHicon());
            }
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e) {
            pictureBox1.Cursor = new Cursor(new Bitmap(Resources.Palm).GetHicon());
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e) {                
            if (pictureBox1.Capture && e.Button == MouseButtons.Left) {
                pictureBox1.Top = e.Y + pictureBox1.Location.Y - MouseStartPos.Y;
                pictureBox1.Left = e.X + pictureBox1.Location.X - MouseStartPos.X;
                pictureBox1.Cursor = new Cursor(new Bitmap(Resources.Catch).GetHicon());
            }
        }


pictureBox1.Cursor = new Cursor(new Bitmap(Resources.Catch).GetHicon())

是將資源裡的圖片轉換成滑鼠遊標的意思