где лучшее место для создания эталонного объекта, используемого методами класса + C # - PullRequest
0 голосов
/ 11 июня 2018

У меня простой и глупый вопрос, однако я надеюсь найти ответ, который прояснит мой разум относительно объектов C # refrence и того, где лучше всего их создавать.я объявил openfile Varaible после объявления класса, чтобы я мог ссылаться на него из любого другого метода внутри класса. Все работает нормально, пока я не нажму кнопку добавления фотографии и не выберу фотографию, если я снова нажал кнопку и отменилПоказать диалог openfile.FileName не сохраняет расширение файла.Чтобы решить проблему, я переместил эту строку кода openfile = new OpenFileDialog(); в конструктор класса. Неправильно создавать объект таким образом, что он будет удерживать пространство в RAM. Или создавать объект только в том месте, куда вы собираетесьиспользуйте это.

 private void addPhotoBtn_Click(object sender, RoutedEventArgs e)
        {
            openfile = new OpenFileDialog();
            openfile.Filter = "Images |*.JPG; *.PNG";
            if (openfile.ShowDialog() == true)
            {
                userImage.Source = new BitmapImage(new Uri(openfile.FileName, UriKind.RelativeOrAbsolute));

                filename = openfile.SafeFileName;
                sourcePath = @openfile.FileName;
                targetPath = System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) + "/Images/users/" + getTime + System.IO.Path.GetExtension(openfile.FileName);
            }
        }
 private void saveUserBtn_Click(object sender, RoutedEventArgs e)
        {


            string fname, lname, username, password, email, phone, address, role, photo = "";
            int spec_id; int dept_id;
            fname = firstNameTextBox.Text.ToString();
            lname = lastNameTextBox.Text.ToString(); ;
            username = usernameTextBox.Text.ToString(); ;
            password = passwordBox.Password;
            email = emailTextBox.Text.ToString(); ;
            phone = phoneTextBox.Text.ToString(); ;
            address = addressTextBox.Text.ToString();
            spec_id = specComboBox.SelectedIndex;
            role = roleComboBox.Text.ToString();

            if (deptComboBox.SelectedIndex >= 0)
                dept_id = int.Parse(deptComboBox.SelectedValue.ToString());
            else
                dept_id = 0;

            // Input Validation
            if (state == "add" && sourcePath != null || sourcePath != null && state != "add")
            {
                photo = new Uri("pack://application:,,/CMMS;component/images/users/") + getTime + System.IO.Path.GetExtension(openfile.FileName);
            }
            .
            .
            .

1 Ответ

0 голосов
/ 11 июня 2018

Если вы хотите получить доступ к имени файла везде, а не пусто, укажите локальное изменение и удерживайте адрес при выборе дяди.После Пространства имен

           private const string FileName = string.Empty;

И так ваш код

        private void addPhotoBtn_Click(object sender, RoutedEventArgs e)
         {
             openfile = new OpenFileDialog();
             openfile.Filter = "Images |*.JPG; *.PNG";
             if (openfile.ShowDialog() == true)
               {
                  userImage.Source = new BitmapImage(new Uri(openfile.FileName, UriKind.RelativeOrAbsolute));

                  filename = openfile.SafeFileName;
                  sourcePath = @openfile.FileName;
                  this.FileName = @openfile.FileName;
                  targetPath = System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) + "/Images/users/" + getTime + System.IO.Path.GetExtension(openfile.FileName);
                }
           }
         private void saveUserBtn_Click(object sender, RoutedEventArgs e)
         {
           string fname, lname, username, password, email, phone, address, role, photo = "";
           int spec_id; int dept_id;
           fname = firstNameTextBox.Text.ToString();
           lname = lastNameTextBox.Text.ToString(); ;
           username = usernameTextBox.Text.ToString(); ;
           password = passwordBox.Password;
           email = emailTextBox.Text.ToString(); ;
           phone = phoneTextBox.Text.ToString(); ;
           address = addressTextBox.Text.ToString();
           spec_id = specComboBox.SelectedIndex;
           role = roleComboBox.Text.ToString();

           if (deptComboBox.SelectedIndex >= 0)
               dept_id = int.Parse(deptComboBox.SelectedValue.ToString());
           else
                dept_id = 0;

             // Input Validation
          if (state == "add" && sourcePath != null || sourcePath != null && state != "add")
           {
              photo = new Uri("pack://application:,,/CMMS;component/images/users/") + getTime + System.IO.Path.GetExtension(this.FileName);
            }
        .
        .
        .
...