2017-11-01 8 views
0

私はWindowsフォームアプリケーションのための簡単な一回のアクティブ化プロセスを作成したいと思います。ですから、私は基本的に2つのフォームを持っています。フォーム1は起動ウィンドウで、フォーム2は実際のプログラムです。私は今、問題は、私は私のプログラムをロードするたびにある、それは常に(すなわちpattern)誰かが正常にキーを入力した場合でもをForm1をロードC#を使用して簡単なワンタイムアクティベーションプロセスを作成する方法は?

string mac = textBox1.Text; 
      string str1 = mac.Substring(4,1); 
      string str2 = mac.Substring(5,1); 
      string str3 = mac.Substring(7,1); 
      string str4 = mac.Substring(2, 1); 
      string pattern = str1 + str2 + str2 + str3 + str4; 
      if (textBox2.Text == pattern) 
      { 
       MessageBox.Show("Program activated!!!"); 
       Form2 n = new Form2(); 
       n.Show(); 
       this.Hide(); 
      } 
      else { MessageBox.Show("Wrong key"); } 

下記をForm1に非常に基本的な起動プログラムを作成しましたかつて。誰かが正しいキーを入力した後、プログラムが読み込まれるたびに自動的にフォーム2(つまり私の実際のプログラム)が表示され、フォーム1がスキップされるように、その情報を保存するにはどうすればいいですか? ところで、私はこれを行うための他のより高度で安全な方法があることを知っていますが、私は今この非常に基本的な方法に興味を持っています。 誰も助けることができますか?

+1

レジストリまたはファイルの使用を検討してください。 – SLaks

+0

フォームとコントロールに名前を付ける必要があります。 – SLaks

+0

メインフォームとしてロードするProgram.csを決定することができます。 – Psi

答えて

0

これは非常に初歩的な方法です。ファイルをアクティブにするときに既知の場所にファイルを書き込んだ後、フォームを読み込むたびにそのファイルの存在を確認します。それがあれば、直ちにForm2を表示してください。もしそうでなければ、彼らに活性化する機会を与えてください。

異なり方法はどこかのレジストリまたはデータベースの起動状態を保存したり、することですが、全体のプロセスは同じ

サンプルコードについてです:

まず、取得する方法私たちが作成しようとしているファイルのパス:

private string GetActivatedFilePath() 
{ 
    var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
    var thisExeName = Path.GetFileNameWithoutExtension(
     System.Reflection.Assembly.GetEntryAssembly().Location); 

    return Path.Combine(appDataPath, thisExeName, "Activated.txt"); 
} 

次に、ファイルを作成する方法のカップル(Activate())ファイルが存在する場合、(IsActivated)を確認し、ファイルを削除します(Deactivate()):

private void Activate() 
{ 
    if (!IsActivated()) 
    { 
     var filePath = GetActivatedFilePath(); 
     Directory.CreateDirectory(Path.GetDirectoryName(filePath)); 
     File.Create(filePath); 
    } 
} 

private bool IsActivated() 
{    
    return File.Exists(this.GetActivatedFilePath()); 
} 

private void Deactivate() 
{ 
    if (IsActivated()) 
    { 
     File.Delete(GetActivatedFilePath()); 
    } 
} 

その後、我々はまた、我々は複数の場所でこれを呼び出すことになるので、第二のフォームを表示するメソッドを作成することができます。これを修正して、現在のフォームを非表示にしてから、2番目のフォームをダイアログとして表示します(つまり、メインフォームに戻ることはできず、2番目のフォームが閉じるまでコードが最初のフォームで一時停止します)。

private void Form1_Load(object sender, EventArgs e) 
{ 
    // If they user is already activated, show the second form immediately 
    if (IsActivated()) 
    { 
     ShowForm2(); 
    } 
} 

そして:

private void ShowForm2() 
{ 
    Form2 n = new Form2(); 
    this.Hide(); 
    n.ShowDialog(); 
    this.Close(); 
} 

彼らは私たちのイベントで活性化している場合今、私たちは確認することができ、そして、彼らはその後、ある場合は、直ちに第二の形式を示しています。二つ目は閉じたときに最初にフォームを閉じます現在のコードでは、これらの関数を使用してユーザーをアクティブ化することもできます。私はコードがActivateボタンの背後にあると仮定しています:

private void btnActivate_Click(object sender, EventArgs e) 
{ 
    bool activated = false; 

    if (textBox1.Text.Length > 7) 
    { 
     string mac = textBox1.Text; 
     string str1 = mac.Substring(4, 1); 
     string str2 = mac.Substring(5, 1); 
     string str3 = mac.Substring(7, 1); 
     string str4 = mac.Substring(2, 1); 
     string pattern = str1 + str2 + str2 + str3 + str4; 

     activated = textBox2.Text == pattern; 
    } 

    if (activated) 
    { 
     MessageBox.Show("Program activated!!!"); 
     Activate(); 
     ShowForm2(); 
    } 
    else 
    { 
     MessageBox.Show("Wrong key"); 
    } 
} 
関連する問題