發表文章

目前顯示的是 3月, 2008的文章

WPF學習日誌 ~ Grid ~

Grid這個"容器"相較之前的容器來看,顯的比較複雜一些,需要設定的東西比較多,下面用簡單的程式碼展示一下基本的功能,希望大家對於Grid能有一些基本的了解 Dim gd As Grid Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded gd = New Grid Me.Title = "Grid Test" ''設定Form的大小跟Content的長、寬是一樣的 Me.SizeToContent = Windows.SizeToContent.WidthAndHeight Me.Content = gd ''為了方面觀看變化,我們把隔線設定為顯示 gd.ShowGridLines = True ''為了範例需要我們把新增欄、列的新增跟按鈕的新增分開處理 For iRow As Integer = 0 To 4 ''新增Grid的列 Dim rd = New RowDefinition If iRow = 4 Then ''最後一列為了展示跨越欄位的button,這邊做特殊設定 ''可以自行修改看看GridUnitType的部分看看有什麼不同 rd.Height = New GridLength(100, GridUnitType.Star) Else rd.Height = GridLength.Auto End If gd.RowDefinitions.Add(rd) Next For iCol As Inte

WPF學習日誌 ~ DockPanel ~

打鐵要趁熱,下面這篇我們繼續看看DockPanel的部分,從名稱上可以看出這跟之前VS2005我們設定控制項的Dock屬性的感覺滿像的,沒錯,大致上是這樣的,下面我們看看測試的程式碼吧 Dim dp As DockPanel Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded dp = New DockPanel Me.Title = "DockPanel Test" Me.Content = dp For z As Integer = 0 To 3 Dim btn As New Button btn.Name = "Button" & z btn.Content = "Button_" & z DockPanel.SetDock(btn, z) dp.Children.Add(btn) ''設定最後加入的元素是否要填滿剩下的空間 dp.LastChildFill = False Next End Sub 比較特別的地方是設定Dock的位置的時候我們是呼叫DockPanel的靜態方法SetDock,不是用"執行個體dp"去設定Dock喔。

變更目前的工作目錄

這邊是在討論區看到的,相關問題的詢問次數也不少,大家可以參考看看 Question - 原文 OpenFileDialog 的問題 有兩個按鈕,A與B,按A可以執行主程式旁邊的一個副程式,裡頭的CODE大概像這樣: Dim MyProcess As New System.Diagnostics.Process MyProcess.StartInfo.FileName = "副程式.exe" MyProcess.Start() 按B會跳出OpenFileDialog,讓使用者選擇檔案如果說,先按A再按B,沒問題。 但是,如果先按B再按A,就會出現錯誤(找不到副程式.exe),因為使用OpenFileDialog好像會更改的預設執行目錄。想請問大大,這個預設執行目錄的設定放在哪丫? 這問題主要是因為當你用"相對路徑"的時候要特別注意,由上面題目看起來,主、副程式應該都是在同一個資料夾內,而如果先有了OpenFileDialog的動作的話,由於工作目錄被變更了,所以產生了找不到檔案的問題。 那應該如何處理呢?下面這個是用Process類別時我比較建議的方式,程式碼如下 Dim p As New Process p.StartInfo.UseShellExecute = True p.StartInfo.WorkingDirectory = Application.StartupPath p.StartInfo.FileName = "副程式.exe" p.Start() 相關參考 ProcessStartInfo.WorkingDirectory 屬性

WPF學習日誌 ~ WrapPanel ~

這篇我們來測試一下第二個"容器",WrapPanel,它是怎麼來幫我們做排版的動作呢? 千言萬語勝不過按一下"F5",讓我們直接瞧瞧程式碼吧 Dim wp As WrapPanel Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded Dim wp As New WrapPanel wp.Background = Brushes.AliceBlue Me.Title = "Test WrapPanel" Me.Content = wp For z As Integer = 0 To 25 Dim btn As New Button btn.Name = "Button" & z btn.Content = "Button _" & Chr(&H41 + z) btn.VerticalAlignment = Windows.VerticalAlignment.Center btn.HorizontalAlignment = Windows.HorizontalAlignment.Center AddHandler btn.Click, AddressOf Button_Click wp.Children.Add(btn) Next End Sub Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) MessageBox.Show(CType(e.Source, Button).Content.ToString) End Sub 執行程式之後去改變視窗的大小,之後就可以看到W

Microsoft DreamSpark

在 Welcome to Microsoft DreamSpark 提到,如果你是學生的話,可以申請免費使用VS2008 pro,Windows Server 2003 std,等其他產品,免費的喔,不過目前還沒有台灣....目前只有下面這些 We are kicking this off in 11 countries/regions, giving DreamSpark to millions of students in the United States, the United Kingdom, Canada, China, Germany, France, Finland, Spain, Sweden, Switzerland and Belgium. If you are not residing in one of the countries listed keep checking back, we will be adding more countries throughout the year. 持續關注吧,相信將來應該會有的,來個全民公投好了, "您是否支持MicroSoft將台灣加入DreamSpark計畫中呢?" 選項一:支持 選項二:一定要的 算了,很冷...還是打程式去~ PS:這篇沒有任何政治立場,請勿做過多的聯想..( 最近很敏感啊~ =.=" )

Hotfix available for VB performance issue in VS2008

在Visual Basic Team的Blog上面發布了這篇文章, Hotfix available for VB performance issue in VS2008 ,節錄部分原文如下 Details The hotfix is a 3.98MB download and can be found at: http://support.microsoft.com/kb/946344 It addresses performance issues in the following scenarios: • The IDE takes a long time to build/rebuild the solution. • You experience a slow response time when you press F5 to start debugging. • You experience a slow response time in the Code Editor. • You experience a slow response time in IntelliSense. 如果你用遇到上述問題的話可以下載Hotfix來作修正,要注意的是沒有上述問題的話可別亂裝,要注意看說明,有些Hotfix因為沒有跟其他東西做很完整的相容性測試,不保證不會出現其他的"靈異現象"喔,這部分說明上會特別提及,要注意看。

WPF學習日誌 ~ 3DTools ~

Note:本篇開發工具使用VS2008,.net framework版本3.5 雖然XAML Code還不會但是還是很想嘗試看看WPF 3D的功能,在WIndowsClient看了 Building an Interactive 3D Video Player 的範例,實在是手很癢..於是乎就照著範例測試了一下,不過其中播放影片的那個UserControl的XAML Code我沒有阿..殘念,沒關係,我用老朋友Button來測試,嘿嘿.. 首先要到 CodePlex 下載3DTools的Dll檔,上面有bin(編譯好的),或是scr(未編譯的),看你是想要用哪一種,檔案準備好了之後,把它加到我們專案的參考進來,下面我們就看看XAML Code吧 很奇怪,我把xmal code貼上之後,畫面出不來,會跑出一個button..真是太神奇了 之接到這邊 下載VS2008的專案檔 來看吧 執行程式之後,你可以按著滑鼠左鍵,然後移動滑鼠(嘿嘿..我的button會旋轉耶..),或是右鍵,可以拉近拉遠,很炫吧。 其中我們看看下面這幾行 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Inter3D="clr-namespace:_3DTools;assembly=3DTools" 上面兩行是預設引入的,Inter3D是加上去的,這感覺像是引入(Imports)命名空間的感覺,有加進來的話才會有相關功能可以用,好啦,不多說了,馬上動手去測試看看吧。 另外Button的部分我們也可以改成下面這樣,也可以放影片喔

WPF學習日誌 ~ StackPanel ~

前面我們測試過幾篇有關WPF的應用程式,不知道有沒有發現,我們沒有辦法指定兩個以上的東西(物件)給Content屬性,WIndow的COntent、Button的Content等等,那怎麼辦呢?總不能用來用去都是使用一個東東而已吧..所以接下來我們要測試一些有關"容器"的部分,在WPF中有下面幾種容器 StackPanel WrapPanel DockPanel Grid Cancas ,這篇只會提到StackPanel的部分,有興趣的朋友可以先自行測試看看,或是到MSDN去看看相關細節;好,下面來看看測試的程式碼吧 Dim sp As StackPanel Dim rnd As Random Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded rnd = New Random() sp = New StackPanel sp.Background = Brushes.AliceBlue Me.Content = sp For i As Integer = 1 To 9 Dim btn = New Button btn.Name = "Button" & i btn.FontFamily = New FontFamily("Consola") Randomize() btn.FontSize = rnd.Next(10, 25) ''用 "_" 設定當按下"alt"按鍵時出現的"快速鍵提示字" btn.Content = "Button No._" & i ''設定按鈕間的間隔 btn.Margin

WindowsClient.net

下面這邊有個學習WPF,windows Form的相關學習資源,有一些Vedio可以看,對於這方面有興趣的朋友,千萬別錯過了,戴好耳機,抓緊滑鼠,咱們出發啦~ WindowsClient.net

WPF學習日誌 ~ 變換Form的背景圖 ~

Note:本篇工具使用VS2008,.Net framework版本3.5 這篇功能測試是每秒會變換Form的背景圖片,話先說在前頭,這篇單純的只是熟悉一下WPF相關物件的使用方式,不會看到WPF的"特異功能",單就功能上來看VS2005也是很輕易的可以完成的。 首先,有些東西要了解一下,像是WPF中並沒有直接提供Timer的控制項,那怎麼做呢?請參考下面這篇 請教WPF form沒有Timer元件了嗎?? 好,下面我們來看看程式碼吧 ''宣告Timer物件 Dim myT As Threading.DispatcherTimer ''宣告Image物件 Dim img As Image Dim B As BitmapImage Dim ImagePath() As String Dim Count As Integer = 0 Dim u As Uri Dim R As New Random Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded ''設定標題列文字 Me.Title = "WPF Text" ''取得圖片檔案路徑 ImagePath = IO.Directory.GetFiles("D:\圖檔\JPG\App") u = New Uri(ImagePath(0)) B = New BitmapImage B.BeginInit() B.UriSource = u B.EndInit() img = New Image img.Source = B img.Stretch = Stretch.UniformToFill Me.Content = img ''

利用"連結的伺服器"在兩個SQL Server中交換資料

圖片
在使用資料庫的時候當資料庫有多個的時候,要彼此交換資料是一個滿麻煩的事情,用複製、貼上的話在Management studio中又要跑滿久的,下面這個方式提供給大家參考看看 首先一樣開啟Management Studio,登入其中一台SQL Server,之後展開"伺服器物件",這時候可以看到"連結的伺服器",在上面點選右鍵,選擇新增之後會看到如下畫面 在"連結的伺服器"這個地方要打的就是我們另一個SQL Server的主機位置了,要注意的是這裡打的是IP位置或是打電腦名稱的話會影響我們待會要下的SQL指令,這個要注意一下;設定好"一般"頁面的參數之後要再設定"安全性"的參數,如下圖 這邊我是設定用sa的帳號去做登入,設定好之後按下確定。 這樣新增完連結的伺服器之後,想要把B-Server的某一個Table的資料完全的複製到A-Server的話,可以在A-Server用"新增查詢"的功能執行下面的SQL指令 Select * into [A-Server].DataBaseName.dbo.tmpTable from [B-Server].DataBaseName.dbo.TableName 其他的部分就自行嘗試看看嚕~

Making PInvoke Easy

圖片
今天在瀏覽 The Visual Basic Team 的Blog時,看到了下面這篇 Making PInvoke Easy ,其中提到一個工具(CLRInsideOut2008_01.exe)能夠幫助我們取得API的宣告方式,比如說要看CreateFile是怎麼宣告的,我抓了下面這張圖 是不是很方便呢?到 原文位置 了解更多吧 ~ 下載CLRInsideOut2008_01.exe解壓縮後裡面也會有使用說明文件喔 ~

如何清除交易紀錄檔

有使用到SQL資料庫常常會有需求需要去做資料庫的管理維護,有時候會遇到交易紀錄檔已滿的錯誤訊息,要要如何處理這個問題呢?下面這邊文章一定要參考一下 SQL交易記錄檔要如何清除 文中不只提到解法,而且提到一些資料備份還原的概念,很有參考價值,下面節錄其中一部分由小朱大發表的清除交易檔的指令 BACKUP LOG [database_name] WITH TRUNCATE_ONLY DBCC SHRINKFILE ([database_log_file_name], [target_size]) Sample BACKUP LOG TestDB WITH TRUNCATE_ONLY DBCC SHRINKFILE ('TestDB_Log', 2)

在裝置(mobile)播放mp3檔案

Note:本篇開發端Media Player版本為11, WM6上Media版本為10.3 之前在 "如何讓裝置發出聲音" 這篇,我們有談過利用呼叫API的方式來播放wav檔,那如果要播放mp3那要怎麼做呢? 首先下面有一些參考資料 play .wma and .mp3 in windows mobile 5 .NET CF 2 - how to play video? 下面是測試的程式碼,可以參考看看 畫面上有一個ListBox名稱為ListBox1,兩個Button分別為btnStart、btnStop Public Class Form1 Dim Player As WMPLib.WindowsMediaPlayer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For Each s As String In IO.Directory.GetFiles("\儲存卡\Music") ListBox1.Items.Add(s) Next Player = New WMPLib.WindowsMediaPlayer Player.settings.volume = 10 End Sub Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click If ListBox1.SelectedIndex >= 0 Then Player.URL = ListBox1.SelectedItem Player.controls.play() End If End Sub Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As

System.Configuration

圖片
Note:本篇測試以及範例程式檔使用Visual Studio 2008 一般應用程式都會有一些設定檔,最常見的是使用文字檔來儲存相關設定,但要自行處理相關的"切割字串"的動作,比較不那麼直覺;或是有時候會使用INI檔或是登錄檔來儲存一些設定;這邊我們介紹另一種方式,使用Configuration提供的部分功能來作 首先,要使用Configuration,你必須先將System.Configuration的參考加入,像是下面這樣圖 加入參考之後我們便可以利用ConfigurationManager開始進行我們要做的功能,首先是UI的部分,我是做了像下面這樣簡單的介面來測試 有3個TextBox分別命名為txtName、txtStartDate、txtEndDate,以及兩個Button,分別是btnSave、btnReload,下面是測試的程式碼 Imports System.Configuration Public Class Form1 Dim CG As Configuration ''' ''' 儲存設定的程式碼 ''' ''' ''' ''' Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click CG.AppSettings.Settings.Item("Name").Value = txtName.Text CG.AppSettings.Settings.Item("StartDate").Value = txtStartDate.Text CG.AppSettings.Settings.Item("EndDate").Value = txtEndDate.Text CG.Save(ConfigurationSaveMode.Modified)