WPFノート1

6960 ワード

メモ内容:
  • BUG、WPFがフォームを実行するときにHide()メソッドを呼び出し、その後に異常解決策
  • をShow()する.
  • WPFフォームがボーダーレス
  • に設定
  • ローカルファイル
  • を選択
  • フォルダ
  • を選択
  • WPFは右下のポップアップメッセージウィンドウ
  • を実現する.
  • WPF表示HTTPネットワークピクチャ
  • 現在のアプリケーションソフトウェアのバージョン
  • を取得
  • 匿名オブジェクト(object)の属性値
  • を取得する
  • WPF*.exeは別の*.exeに
  • を伝達する
  • C#zip圧縮とzip解凍、ダウンロードアドレス:ここをクリックDotNetZip
  • C#ファイルパスからファイル名
  • を取得
  • C#におけるis判定タイプとas強制変換
  • WPFプログラムパスを取得するいくつかの方法プログラムパスに基づいてプログラムセット情報を取得する 

  •  
    1 BUG,WPFフォーム実行時にHide()メソッドを呼び出してから異常な解決策をShow()
    XAMLページ:Closed="Window_Closed"
    CSバックグラウンド:
    private void Window_Closed(object sender, EventArgs e)
    {
    this.Hide();
    }
    

      
    再度Show()が表示されると異常が発生します.
    noti.Click += delegate
    {
    this.Show();
    };
    

      
    ソリューションOnClosingイベント解決ウィンドウが非表示になってから再開できないバグを書き換えます.
    protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
    {
    this.Hide();
    e.Cancel = true;	//     
    }
    

      
    クローズイベントClosingとClosedの違いウィンドウが本当に閉じる前に、ClosingがトリガーされてからClosedがトリガーされます.
     
    2、WPFフォームは枠なしに設定
    シナリオ1:
    3、ローカルファイルの選択
    private void OpenFile_Click(object sender, RoutedEventArgs e)
    {
        //    OpenFileDialog
        var openFileDialog = new Microsoft.Win32.OpenFileDialog()
        {
            Filter = "*.xml|*.XML",	    //     
            Title = "    ",	    //              
    	InitialDirectory="c:\\",    //         
    	RestoreDirectory=true	    //         
        };
        var result = openFileDialog.ShowDialog();
        if (result == true)
        {                
    	//      
            string filename = openFileDialog.FileName;
        }
    }
    

    4、フォルダ選択フォルダはSystem.Windows.Formsの密封類FolderBrowserDialogを使用している.
    private void dialogFolder_Click(object sender, RoutedEventArgs e)
    {
        var dialog = new FolderBrowserDialog()
        {
            SelectedPath = @"f:",               //          
            Description = "        ",   //              
            ShowNewFolderButton = true          //                   ,    true
        };
        
        var result = dialog.ShowDialog();
        if (result == System.Windows.Forms.DialogResult.Cancel)
        {
            //   
            return;
        }
        //       
        string foldername = dialog.SelectedPath.Trim();
        //  CODE
        //            
        System.Diagnostics.Process.Start("explorer.exe ", this.txtFolder.Text);
    }
    

    5、WPFは右下のポップアップメッセージウィンドウを実現する
    1)using System.Windows.Threadingを参照する.
    2)実現
    public MainWindow()
    {
        InitializeComponent();
            timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromMilliseconds(300);
        timer.Tick += timer_Tick;
        this.Left = SystemParameters.WorkArea.Width - this.Width;
        this.EndTop = SystemParameters.WorkArea.Height-this.Height;
        this.Top = SystemParameters.WorkArea.Height;
    }
    private DispatcherTimer timer;
    public double EndTop { get; set; }
    
    void timer_Tick(object sender, EventArgs e)
    {
        while (this.Top > EndTop)
        {
            this.Top -= 5;
        }
    }
    
    private void Window_Loaded_1(object sender, RoutedEventArgs e)
    {
        timer.Start();
    }
    

    6、WPFはHTTPネットワーク画像を表示する
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http//      ");
    WebResponse response = request.GetResponse();
    Image img = Image.FromStream(response.GetResponseStream());
    

    7、現在のアプリケーションのバージョンを取得する
    string version = Version(System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetEntryAssembly().Location).ProductVersion);
    

    8、匿名オブジェクト(object)の属性値を取得する
    Type type = obj.GetType();
    PropertyInfo[] ps = type.GetProperties();
    foreach (PropertyInfo p in ps)
    {            
        var n = p.Name;                 //   
        var v = p.GetValue(obj, null);  //   
        var t = p.PropertyType;         //    
    }
    

    9、WPF*.exeは別の*.exeに値を伝達する
    ステップ1:受信した*.exeのApp.xaml.csセットアッププログラムの実行時にトリガーされるイベント
    protected override void OnStartup(StartupEventArgs e)
    {
        if (e.Args != null && e.Args.Length > 0)
        {
            this.Properties["args"] = e.Args[0];
        }
        base.OnStartup(e);
    }
    

    ステップ2:値を取る
    if (Application.Current.Properties["args"] != null)
    {
        string args = Application.Current.Properties["args"].ToString();
    }
    

    ステップ3、*.exeに値を渡す
    System.Diagnostics.ProcessStartInfo exe = new System.Diagnostics.ProcessStartInfo(@"  *.exe", "args  ");
    System.Diagnostics.Process.Start(a);
    

    10、C#zip圧縮とzip解凍ネットワーク上のこの方面のプラグインは比較的に多くて、例えば(ICSharpCode.SharpZipLib.dll)、本人はDotNetZipを使うことをお勧めします.1)asp.netネットワークダウンロードアプリケーション:URLパラメータに基づいてサーバーのファイルを選択し、ユーザーがダウンロードできるようにし、サーバーはzip圧縮ファイルを保存する必要はない.
    2)C#ローカルファイルを圧縮し、指定したアドレスに保存
    3)zipファイルパスに従ってファイルを解凍する
    4)zipファイルで指定したファイルを削除できます
    5)既存のzip圧縮ファイルにファイルを追加できる
    具体的な使い方は、ネットでDotNetZipを検索して使うか、Ionic.Zip
    ダウンロード先:ここをクリックしてDotNetZip
     
    11、C#ファイルパスでファイル名を取得する前にファイル接尾辞名やファイル名を取得するときは、LastIndexOf、Replaceなどを常に使用していたが、実際には必要なかった.System.IO.Pathを使用すると、それを全く必要としません.例:
    string fullPath = @"\site\image.gif";
    string filename = System.IO.Path.GetFileName(fullPath);		   //    image.gif
    string extension = System.IO.Path.GetExtension(fullPath);	   //    .gif
    string name = System.IO.Path.GetFileNameWithoutExtension(fullPath);//           image
    string directoryname = System.IO.Path.GetDirectoryName(fullPath);  //       
    

    12、C#におけるis判定タイプとas強制変換
    asオペレータ変換を使用し、従来のCスタイルの強制変換を使用してisを使用して変換テストを行い、asオペレータまたは強制回転例1を使用します.
    object o = *;     
    try
    {
        MyType t = (MyType) o;
        if (t != null)
        {
            ////     
        }
        else
        {
            ////     
        } 
    
    }
    catch
    {
        ////    
    }
    

    例2:
    if(T is System.String)
    

    例3:
    public static T Haha<T>()
    {
        Type tp = typeof(T);
        if (tp.FullName == "System.String")
        { 
    	//  String   
        }
        else if (tp.FullName == "System.Data.DataTable")
        {
        	//  DataTable  
        }
        return tp.ToString();
    }