2016-08-28 10 views
-1

私はC#プログラミングの新機能で、小さな問題を抱えています。下のスクリーンショットのように3つの入力ボックスを持つ小さなアプリケーションを作成しています。ユーザがソースボタンをクリックすると、ソースフォルダを自由に選択できます。彼がOKを選択すると、フォルダの横にあるText Boxにはpathが設定されます。その部分が機能しています。 問題は、ボックスからのパスがコード内の文字列に渡されない理由を理解するために才能が不足していることです。たとえば、リストの場所を入力して文字列Item_Listを入力すると、コードは正常に動作します。私は、ソースと宛先の文字列のために同じことをするなら、アプリは完全に正常に動作します。しかし、ユーザーがパスの宛先を選択するだけでこれらの変数を設定しようとすると、それは機能しません。だから私は何が欠けているかを見てみる必要があります。 C:\ Filesというテキストボックスの値が文字列Source = @ ""に渡されないのはなぜですか?私は "\"のためにこれを間違った方法で処理していると仮定しています。何か案は?C#ユーザ入力ボックスから文字列へのパスを渡す

Appscreenshot

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 

     string Source = @""; 
     string Destination = @""; 
     string Item_List = @"C:\Users\Slavoljub Petkovic\Desktop\List.txt"; 


     public Form1() 
     { 
      InitializeComponent(); 
     } 
     //------------Form1 Load()---------------------------- 


     private void Form1_Load(object sender, EventArgs e) 
     { 

      Source = tbSource.Text; 
      Destination = Convert.ToString(tbDestination.Text); 


     } 
     //-----------Move Files In The List------------------- 

     private void MoveFileInList() 
     { 

      StreamReader sr; 
      string curFile; 
      string to_file, from_file; 
      sr = File.OpenText(Item_List); 
      curFile = sr.ReadLine(); 
      while (curFile != null) 
      { 
       to_file = Destination + "/" + curFile; 
       from_file = Source + "/" + curFile; 
       File.Move(from_file, to_file); 
       curFile = sr.ReadLine(); 
      } 
      sr.Close(); 
     } 


     private void label1_Click(object sender, EventArgs e) 
     { 

     } 

     private void label2_Click(object sender, EventArgs e) 
     { 

     } 


     private void label3_Click(object sender, EventArgs e) 
     { 

     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      MoveFileInList(); 
     } 

     private void label5_Click(object sender, EventArgs e) 
     { 

     } 

     private void pictureBox1_Click(object sender, EventArgs e) 
     { 

     } 

     private void Box_Source_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void Box_List_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void button1_Click_1(object sender, EventArgs e) 
     { 


     } 

     private void folderBrowserDialog1_HelpRequest(object sender, EventArgs e) 
     { 

     } 

     private void DestinationPath_Click(object sender, EventArgs e) 
     { 
      if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) 
      { 
       this.tbDestination.Text = folderBrowserDialog1.SelectedPath; 
      } 
     } 

     private void SourcePath_Click(object sender, EventArgs e) 
     { 
      if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) 
      { 
       this.tbSource.Text = folderBrowserDialog1.SelectedPath; 
      } 
     } 

     private void ListPath_Click(object sender, EventArgs e) 
     { 
      if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) 
      { 
       this.tbList.Text = folderBrowserDialog1.SelectedPath; 
      } 
     } 

     private void Form1_Load_1(object sender, EventArgs e) 
     { 

     } 

     private void tbList_TextChanged(object sender, EventArgs e) 
     { 

     } 
    } 
} 
+0

デバッガでコードをステップ実行しようとしましたか? –

+0

'FolderBrowseDialog'を使うと、パス名を入力する手間を省くことができますし、誤植や誤ったパスをテストする必要もありません。 – Plutonix

+0

はいとはい。 3つの入力すべてに対してFolderBrowseDialogを使用しています。そして、私はアプリをデバッグするとき、私の文字列SourceとDesrinationは空であると言います。しかし、私はそれらを入力テキストボックスと同等であると宣言しました。 – Slavisha

答えて

0

あなたは、フォームのLoadイベント内の2つの変数にソースとデスティネーションのテキストボックスの値を代入しています。

Source = tbSource.Text; 
Destination = tbDestination.Text; 

フォームがロード現時点では、これらのテキストボックスに書かれているとき、テキストボックス内のテキストが変更更新されませんテキストが含まれているよりもこれらの変数。

これらの値をMoveFileInListメソッドで使用すると、ロード時に現在の値ではなくテキストボックスの値が含まれます。

to_file = Destination + "/" + curFile; 
from_file = Source + "/" + curFile; 

あなたがしたいことは、テキストボックスの現在の値を読み取ることです。

to_file = Destination.Text + "/" + curFile; 
from_file = Source.Text + "/" + curFile; 
+0

このようなことをありがとうございました。私がやったことは次の通りです: 置くSource = tbSource.Text; 宛先= Convert.ToString(tbDestination.Text); は になります。private void MoveFileInList() そして今はcharmのように動作します。あなたは最高です。 – Slavisha

+0

文字列宣言も関数に移動しましたか?厳密には必要ではありませんが、関数内でのみ使用している場合は、そこに保持することは悪い習慣です。 –

+0

はい、今私はしました:-)誰も似たようなことをしようとした場合、私は夜を過ごしました。私はコードを見ることができないが、論理に従うことができたビデオを見つけました。問題を指摘してくれてありがとう。 – Slavisha

関連する問題