ラベル C# の投稿を表示しています。 すべての投稿を表示
ラベル C# の投稿を表示しています。 すべての投稿を表示

2009/12/26

ファイル

//ファイル名の取得
this.Name = System.IO.Path.GetFileName(this.FullPath);

                // ディレクトリ名の設定 (最後に'¥¥'は付かない)
                this.DirPath = Path.GetDirectoryName(this.FullPath);

                //ファイル名の設定(拡張子無し)
                this.NameWithoutExt = Path.GetFileNameWithoutExtension(this.FullPath);

                //拡張子の取得(1文字目は'.')
                this.Ext = Path.GetExtension(this.FullPath);

2009/04/15

アプリケーションの終了

C#でApplication.Exit() を実行しても、その後の処理が行われる事にビックリしている人は多いのではないでしょうか?

その後の処理を実行されなくするには、下記を実行します。

Environment.Exit(0);

※(0)は戻り値です。任意で設定可能です。
 よくあるパターンでは、0は正常終了、1は○○エラー、2は■■エラーという様に分岐させたりします。

2009/04/06

二重起動の無効化

Program.csふぁいるに下記を追記します。


        ///
        /// アプリケーションのメイン エントリ ポイントです。
        ///
        [STAThread]
        static void Main()
        {
            const string MUTEX_NAME = "MutexApplication";

            // Mutex インスタンスを生成します。二番目の引数 MUTEX_NAME は生成する Mutex の識別名です。
            System.Threading.Mutex mutex = new System.Threading.Mutex( false, MUTEX_NAME );

            // WaitOne メソッドを使って、所有権を得ます。
            // 最初の引数で 0 ミリ秒を指定して、所有権が取得できなくても待ちません。
            if ( mutex.WaitOne( 0, false ) )
            {
                // 下記の色付のコードはデフォルトで記入されているコードです。
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault( false );
                Application.Run( new Form1() );

                mutex.ReleaseMutex();
            }
            else
            {
                // WaitOne メソッドで所有権を取得できなかった場合の処理です。
                MessageBox.Show( "アプリケーションは既に起動しています。", "タイトル");

            }

            mutex.Close();
        }

フォーム右上の閉じるボタン無効化

protected override System.Windows.Forms.CreateParams CreateParams {
get {
const int CS_NOCLOSE = 0x200;

System.Windows.Forms.CreateParams createParams = base.CreateParams;
createParams.ClassStyle |= CS_NOCLOSE;

return createParams;
}
}

2009/04/03

//モーダル表示
form.ShowDialog();

//モーダレス表示
form.Show();


show()      はモーダレス
ShowDialog() はモーダルで
指定フォームを表示します。

C# ファイルの読取専用属性を解除

using System.IO;

下記で属性が外せます。

File.SetAttributes(ファイルパス,FileAttributes.Normal);

//ふぁいる属性取得(FileAttributes列挙体を返す)
File.GetAttributes(@"c:\hoge\hoge.txt");

//読み取り専用属性があるか調べる
if ((File.GetAttributes(@ファイルパス) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
"読み取り専用属性があります。";
}

2009/03/04

設定ファイルから全キーの取得

プロジェクトと同じ名前空間とする場合、

//設定値「path」を追加、変更
Properties.Settings.Default.path = "c:\hoge";

//または次のようにもできる
Properties.Settings.Default["path "] = "c:\hoge";


名前空間を指定して、設定する (名前空間 「global::EXCELBOOKS2SHEET」の場合)
global::EXCELBOOKS2SHEET.Properties.Settings.Default.path = "c:\hoge";

因みに、このファイルは、
C:¥¥Documents and Settings¥¥ユーザー名¥¥Local Settings¥¥Application Data
に作成され、ファイルを削除して、書き込みを行うと自動でファイルが作成されます。

//保存
global::EXCELBOOKS2SHEET.Properties.Settings.Default.Save();

//リセット ( 保存されている設定を削除して既定値に戻す 
global::EXCELBOOKS2SHEET.Properties.Settings.Default.Reset();

//リセット ( 保存されていた初期状態に戻す 
global::EXCELBOOKS2SHEET.Properties.Settings.Default.Reload();

//すべてのキーとその値を取得
Hashtable ht = new Hashtable();

Properties.Settings config = Properties.Settings.Default;

foreach (string key inconfig.Context.Keys)
{
      ht[key] = config[key].ToString(); 
}




2009/03/01

EXCEL セルの背景色変更 

セルの背景色変更

※oSheetはエクセルシート インスタンス

using System.Drawing;

oSheet.get_Range("A1", "B1").Interior.Color = ColorTranslator.ToOle(Color.blue);

色の指定は下記の形式でも設定可能です。
oSheet.get_Range("A1", "B1").Interior.Color = ColorTranslator.ToOle(Color.FromArgb(252, 219, 186));


2009/02/27

EXCELの使用している最終行と最終列を取得

using Excel = Microsoft.Office.Interop.Excel;


/// Excelオブジェクト
Excel.Application oXls;

/// ワークブックコレクション
Excel.Workbook oWBook = this.oXls.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);

/// ワークシートコレクション
Excel.Sheets oSheets =oWBook.Sheets;

///ワークシート
Excel.Worksheet oSheet = (Excel.Worksheet)oWBook.ActiveSheet;

Object after = this.sheets[ oSheets .Count];
Object before = Missing.Value;

// ワークシートを取得
oSheet = (Excel.Worksheet)this.sheets.Add(before, after, 1, Excel.XlSheetType.xlWorksheet);

/// EXCELの使用している最終行を取得
oSheet.UsedRange.Rows.Count;

/// EXCELの使用している最終列を取得
oSheet.UsedRange.Columns.Count;

2009/02/25

CSVファイルをデータセットへ格納

CSVファイルをデータセットへ格納する処理を記載します。

//usingします。
using Microsoft.VisualBasic.FileIO;

//ファイル名
name = "hoge.csv";

//ファイルパス
path = "C\:test\";

//SQLを作成します
string sql = String.Format("SELECT * FROM [{0}]",name);

//接続文字列を作成します(Microsoft.Jet.OLEDB.4.0 の部分は参照設定されているファイルにより異なります)
string conString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Text;HDR=No;"";",path);
            
//コネクションの生成
OleDbConnection con = new OleDbConnection(conString);
            
//オープンします
con.Open();

//SQLを実行します
OleDbDataAdapter oda = new OleDbDataAdapter(sql, con);

//クローズ処理
con.Close();

//データテーブル作成
DataTable table = new DataTable(name);

//Fillする
oda.Fill(table);

//データセット作成
DataSet ds = new DataSet();

//データセットにデータテーブルを設定
ds.Tables.Add(table);

EXCELのファイルオープン処理

EXCELのファイルオープン処理
前提条件:using Excel = Microsoft.Office.Interop.Excel;
(※上記usingでエラーが表示される場合は、参照設定されていないか、既に「Excel」という名前空間が存在している状態となります)

//ファイル名
string excelName = "C:\\sample.xls";

 // Excelインスタンス
Excel.Application oXls 
 = new Excel.Application();

// 確認のためExcelのウィンドウを表示する
oXls.Visible = true; 

// Excelファイルをオープンする
Excel.Workbook oWBook   =  (Excel.Workbook)(oXls.Workbooks.Open(
      excelName,  // オープンするExcelファイル名
     Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3)
     Type.Missing, // (省略可能)ReadOnly (True / False )
     Type.Missing, // (省略可能)Format
      // 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;)
      // 5:なし / 6:引数 Delimiterで指定された文字
      Type.Missing, // (省略可能)Password
      Type.Missing, // (省略可能)WriteResPassword
      Type.Missing, // (省略可能)IgnoreReadOnlyRecommended
      Type.Missing, // (省略可能)Origin
       Type.Missing, // (省略可能)Delimiter
       Type.Missing, // (省略可能)Editable
       Type.Missing, // (省略可能)Notify
       Type.Missing, // (省略可能)Converter
       Type.Missing, // (省略可能)AddToMru
       Type.Missing, // (省略可能)Local
       Type.Missing  // (省略可能)CorruptLoad
));

2009/02/23

「Delegate」による非同期スレッド処理

非同期呼び出しは Delegate.BeginInvoke によって実行され、戻り値に IAsyncResultが返却されます。
このIAsyncResult を取得するにはEndInvokeを使用することにより、引数として IAsyncResult が取得できます。
デリゲートは、スレッド処理でも、引数の指定、戻り値の取得のし易いさが特徴的なので、ぜひ熟知しましょう。

// 処理の待ち合わせ
delegate void ThreadDelegate( );

class AsyncDelegateInvoke
{
public static void SampleMethod()
{
// 非同期に実行する内容
}

public static void Main()
{
ThreadDelegate dlgt=new ThreadDelegate( SampleMethod );
IAsyncResult asynresult = dlgt.BeginInvoke( null,null );
// メインスレッドで実行する内容
dlgt.EndInvoke( asynresult ); // EndInvoke による完了待ち
}
}

// IAsyncResult.IsComplete をポーリング
delegate void SampleAsyncDelegate( );

class AsyncDelegateInvoke
{
public static void ThreadDelegate()
{
// 非同期に実行する内容
}
public static void Main()
{
ThreadDelegate dlgt=new ThreadDelegate( SampleMethod );
IAsyncResult asynresult = dlgt.BeginInvoke( null,null );
// メインスレッドで実行する内容

// 完了待ち
while( !asynresult.IsComplete() ) Thread.Sleep(0);

 // 完了後の情報の引き取り
dlgt.EndInvoke( asynresult );
}
}

// 引数の指定とコールバックによる戻り値取得
delegate void ThreadDelegate( string str );

class AsyncDelegateInvoke
{
public static void SampleMethod(string str)
{
// 非同期に実行する内容
}

  //スレッド完了時に行われる処理
private static void AsyncComplete( IAsyncResult ar )
{
// スレッド完了時処理
AsyncResult asyncResult= (AsyncResult)ar;
 
ThreadDelegate dlgt = (ThreadDelegate)asyncResult.AsyncDelegate;

dlgt.EndInvoke( ar );
}


public static void Main()
{
     //インスタンス生成 
ThreadDelegate dlgt=new ThreadDelegate( SampleMethod );

//引数が複数ある場合は、カンマ区切りで複数指定する。 処理が完了するとAsyncCompleteで検知する。
AsyncCallback callback =new AsyncCallback(str , AsyncComplete );
 
     //処理実行 
IAsyncResult asynresult = dlgt.BeginInvoke( callback,null );
 
 // メインスレッドで実行する内容
}
}

ファイル書込み

C#でのファイル書き込み処理について、説明します。

1.手順
 ①ファイルパス設定
 ②ファイルの有無確認
 ③ファイルの書込み

2.コード

// ファイルフルパス設定
string fullpath = @"c:\hoge.txt";

//ファイルの生む確認をします
 if (! System.IO.File.Exists(fullpath ))
 {
        MessageBox.Show("ファイルが存在しません");

        //ファイルを作成する場合の処理 
        using (System.IO.StreamWriter sw = System.IO.File.CreateText(fullpath ))
        {
               //書き込み処理 
               sw.WriteLine("あいうえお");

               //書き込み処理 
                sw.Write("This is the ");

                //閉じる  
                sw.Close();
         }
 }

//※ファイルの有無確認は「File.Exists(fullpath )」でしたが、
//※ディレクトリの有無確認は、Directory.Exists(dirPath)で行います。

//true: 追記 / false:上書き 
appendflg = false;   

//文字コードをシフトJISにします。
System.Text. Encoding   encoder =  Encoding.GetEncoding("Shift_JIS")

//ファイルストリームインスタンスを生成(ファイルパス 、書き込みモード 、エンコード  )
System.IO. StreamWriter sw = new StreamWriter(fullPath,  appendflg ,  encoder  );

//書き込み処理 
sw.WriteLine("あいうえお");

//書き込み処理 
sw.Write("This is the ");

//閉じる 
sw.Close();

2009/02/22

ファイルパス

下記のファイルパスが設定されていると仮定して説明します。
string FullPath = "c:\test\hoge\hoge.txt" ;

 //ファイル名の取得
 string Name = System.IO.Path.GetFileName(FullPath);
 ※hoge.txt が取得できます。

 // ディレクトリ名の取得 (最後に'¥¥'は付かない)
 string DirPath =  System.IO.Path.GetDirectoryName(FullPath);
 ※c:\test\hoge が取得できます。

 //拡張子無しのファイル名の取得
 string NameWithoutExt =  System.IO.Path.GetFileNameWithoutExtension(FullPath);
 ※hoge が取得できます。

 //拡張子の取得(1文字目は'.')
 string Ext =  System.IO.Path.GetExtension(FullPath);
 ※.txt が取得できます。

2009/02/21

ドラッグアンドドロップ

Windowsアプリケーションでドラッグ&ドロップ処理の作成をします。
対象:Visual C# .NET または Visual C# 2005

1.手順
①ドロップターゲットのAllowDropプロパティをTrueに設定します。
②DragEnterイベントによりオブジェクトにドラッグされたことを検知します。
③Dropイベントによりオブジェクトにドロップされたオブジェクトを取得し、処理を行います。

※例:フォーム上にデータグリッド「dataGridView1」が、存在すると仮定し説明します。
    よって、他のオブジェクトの場合、「dataGridView1」の部分を変更して下さい。

    private System.Windows.Forms.DataGridView dataGridView1;


2.実際のコード
①VS上で、ドラッグ&ドロップしたいターゲットのオブジェクトの下記のプロパティを変更します。
これにより、ファイルなどをオブジェクト上にドラッグできるようになります。

 プロパティ dataGridView1.AllowDrop = True

②下記のイベントは、「dataGridView1」にドラックされた時に発生します。

protected void dataGridView1_DragEnter(object s, DragEventArgs e)
{
// ドラックされたデータ内にファイルが存在するか判定します。
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
//カーソルを取得(カーソルを取得しないとドロップイベントが起動しません。)
e.Effect = DragDropEffects.All;
}
}



③下記のイベントはドラッグしたオブジェクトを「dataGridView1」でドロップした際に発生します。
protected void dataGridView1_DragDrop(object s, DragEventArgs e)
{

//ドラッグされたオブジェクトからファイルパスコレクションを取得
string[] FilePaths = (string[])e.Data.GetData(DataFormats.FileDrop);

//ファイルパスコレクションから各ファイルのフルパスを取得
foreach (string FilePath in FilePaths)
{
//ファイルのフルパスを取得
System.IO.FileInfo file = new System.IO.FileInfo(FilePaths);
}
}