2014-09-18 3 views
1

Я новичок в C#, и я пытаюсь реализовать button.visible true/false на основе содержимого файла txt. Все, что я написал на сегодняшний день, в лучшем случае нестабильно. Это для отдельного приложения Winform в главном диалоговом окне.Показать кнопку, основанную на сравнении входа

В идеальном мире кажется, что это должно быть проще. Я хочу, чтобы код открыл Permissions.txt, и я знаю, что успешно получаю доступ, так как MessageBox покажет первое имя в списке и сравните Environment.UserName со всеми именами в файле .txt. Как только кнопка отображается, открывается новое диалоговое окно.

Любой желающий учить новенького. Я искал какое-то время, и я этого не вижу.

Я также пробовал работать с File.Readlines без каких-либо успехов.

Благодарим вас за любую помощь, которую вы готовы предоставить.

Frank Pytel

public void hideWidget() 
    { 
     //gets the users login name from the system 
     string newName = userNameOnly(); 

     // Read the file and display it line by line. 
     System.IO.StreamReader file = 
      new System.IO.StreamReader(dataFolder + "\\Permissions.txt"); 


     //This next bit called Original Code works on my local when I access it, when accessed from a server, but not for other users. 
     //Original code 
     //while ((line = file.ReadLine()) != null) 
     //{ 
     // if (line == newName) 
     // { 
     //  WidgetForm.Visible = true; 
     // } 
     // else 
     // { 
     //  WidgetForm.Visible = false; 
     // } 
     // //MessageBox.Show(line); 
     // counter++; 
     //} 

     //file.Close();    


//This is where I am at currently. Again it's not picking up all of the names in the .txt file. 

     while (file.ReadLine() != null) 
     { 

      //string line; 
      string line = file.ReadLine(); 

      if (newName == file.ReadLine()) 
      { 
       WidgetForm.Visible = false; 
      } 
      else 
      { 
       WidgetForm.Visible = true; 
      } 
      int counter = 0; 

      //MessageBox.Show(line); 
      //MessageBox.Show(file.ReadLine()); 
      counter ++; 
     } 

     //file.Close(); 

    } 

EDITED ....

Кроме того, если есть кто-нибудь, что могло бы объяснить, как ломаная линия; устанавливается на мое имя пользователя. Вот как это должно было быть установлено, но я никогда не говорил ему строку == newName в исходном коде. Я думал, что это то, что для While. Чтобы проверить, не равны ли они.

ОКОНЧАТЕЛЬНЫЙ РЕДАКТИРОВАТЬ.

Вот что я должен работать. Спасибо @ Bedford.

Эта часть идет непосредственно ниже класса Form1

string[] lines = File.ReadAllLines(dataFolder + "\\Permissions.txt"); 

Это логика кнопки

 public void hideWidget() 
    { 
     //Make all userNames available to the logic 
     string newName = userNameOnly(); 

     //variable to decide if userExists is true/false 
     bool userExists; 

     //Loop through all of the userNames in the file and see if it matches the userName login 
     while (lines != null) 
     { 
      //Decide to make the button available if userExists does exist in the file 
      if (lines != null) 
      { 
       userExists = lines.Any(ln => ln == newName); 

       WidgetForm.Visible = userExists; 
      } 

       //Do nothing if the userName does not match anyone in the Permissions.txt file. The button default Visible is false 
      else 
      { 

      } 
      return; 
     } 
    } 

hideWidget() Я отправляю этот фрагмент кода, чтобы другие могли извлечь выгоду из этого. Еще раз спасибо @Bedford. Этот NEWB очень ценит помощь. HAGD !! :-)

ответ

2

Вы можете прочитать все строки из файла с File.ReadAllLines статический метод, а затем использовать запрос LINQ, чтобы проверить любой из линий, соответствуют ли имя пользователя:

string[] lines = File.ReadAllLines(Path.Combine(dataFolder, "Permissions.txt")); 
bool userExists = lines.Any(ln => ln == newName); // or any comparison you like 

// use the bool variable to set the visibility 
WidgetForm.Visible = userExists; 
+0

Если всегда используйте 'Path.Combine'. Внутренне это будет выяснить, если аргументы начинаются/заканчиваются обратными косыми чертами и соответствующим образом их объединяют. –

+0

@muffin Man Я сделал ' внутренняя статическая строка appPath = System.Windows.Forms.Application.StartupPath; внутренняя статическая строка dataFolder = System.IO.Path.Combine (appPath, "Data"); внутренняя статическая строка reportFolder = System.IO.Path.Combine (appPath, «Report»); внутренняя статическая строка weeklyFolder = System.IO.Path.Combine (appPath, «Weekly»); ' –

+0

Я новичок в этом. Надеюсь, я правильно сделал эти внутренние дела, чтобы сделать комбайн? –

Смежные вопросы