Я новичок в 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 !! :-)
Если всегда используйте 'Path.Combine'. Внутренне это будет выяснить, если аргументы начинаются/заканчиваются обратными косыми чертами и соответствующим образом их объединяют. –
@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»); ' –
Я новичок в этом. Надеюсь, я правильно сделал эти внутренние дела, чтобы сделать комбайн? –