Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 19.04.2015
Сообщений: 21

Создание профиля

10.08.2015, 15:12. Показов 2821. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я хочу реализовать создание профилей в своей программе, например, чтобы при первом запуске на компьютере программа спрашивала у пользователя, как его зовут и его пол, а при последующих запусках, уже "здоровалась" с ним , как это можно реализовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.08.2015, 15:12
Ответы с готовыми решениями:

Анализ яркостного и цветового профиля строк
подскажите плиз скрипт как извлечь из целого изображения строку с показателями яркости и цветности.

Как определить папку профиля пользователя
Как определить папку профиля пользователя на С# и сохранить путь к ней в переменную типа string ?

В массиве H(n) хранятся значения высот некоторого профиля местности
Подскажите как решить? В массиве H(n) хранятся значения высот неко¬торого профиля местности (ее вертикального сечения) с постоянным шагом...

12
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
10.08.2015, 15:23
в тхт записывай, при открытии читай и юзай если файл есть, если нету то предлагай указать данные
1
4 / 4 / 1
Регистрация: 18.12.2013
Сообщений: 121
10.08.2015, 16:30
Максимус165, как вариант, сделай форму при первом запуске чтобы спрашивала например логин и пароль

Справа в верху есть Обозреватель решений(VS 2010 у меня так). Находишь папку Properties > файл Settings.settings

Открываешь, создаешь строковую переменную Login например

В форме первого запуска например считываешь Логин так

C#
1
2
Properties.Settings.Default.Login = textbox1.Text;
Properties.Settings.Default.Save();
При следующем входе она будет запоминать это значение, тебе его нужно будет только считать, например

C#
1
2
string login = Properties.Settings.Default.Login;
MessageBox.Show("Ваш Логин: " + login);
Минус в том, что если юзаешь на разных компьютерах, то значения пропадают, надо будет заново ввести
2
 Аватар для Zhavoronkov5
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
10.08.2015, 22:22
Для начала я бы сделал так:

1. Создал отдельный файл User.cs. В него бы забил все, что связано с нашим профилем пользователя. Допустим, мы хотим хранить имя пользователя и его возраст:
C#
1
2
3
4
5
    struct User
    {
        public string name;     //  имя пользователя.
        public int age;         //  возраст.
    }
Тут я использовал структуру - она попроще, на мой взгляд. Можно создать класс, но не следует забывать, что класс - это ссылочный тип.

2. Переходим к форме. На ней две кнопки - "Саша" и "Вова". Пока пользователь хоть одну не нажмет, не появятся рабочие элементы - кнопка "Показать" и два текстовых поля - "Имя" и "Возраст".

Имена конкретных пользователей хранятся где-то в файлах или настройках. Но, для простоты, пусть они будут намертво вшиты в код программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    public partial class Form1 : Form
    {
        User currUser = new User();
        User sasha = new User();
        User vova = new User();
 
        
        //  Конструктор формы.
        public Form1()
        {
            InitializeComponent();
 
            //  Заполняем данные пользователей
            //  Обычно это читают из файла.
 
            sasha.name = "Саша";
            sasha.age = 18;
 
            vova.name = "Вова";
            vova.age = 31;
 
            //  Пока не выбран пользователь, скрываем рабочие элементы.
            buttonCurrUser.Visible = false;
            textBoxCurrUserAge.Visible = false;
            textBoxCurrUserName.Visible = false;
            
        }
Обработчики кнопок "Саша" и "Вова":
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        //  Нажата кнопка "Саша".
        private void buttonSasha_Click(object sender, EventArgs e)
        {
            currUser = sasha;   //  задаем текущего пользователя - Сашу.
 
            textBoxCurrUserAge.Visible = true;      //  отображаем рабочие элементы
            textBoxCurrUserName.Visible = true;
            buttonCurrUser.Visible = true;
        }
 
        //  Нажата кнопка "Вова".
        private void buttonVova_Click(object sender, EventArgs e)
        {
            currUser = vova;    //  задаем текущего пользователя - Вову.
            textBoxCurrUserAge.Visible = true;      //  отображаем рабочие элементы.
            textBoxCurrUserName.Visible = true;
            buttonCurrUser.Visible = true;
        }
После нажатия на одну из этих кнопок появится кнопка "Показать" и текстовые поля. Обработчик кнопки:
C#
1
2
3
4
5
        private void buttonCurrUser_Click(object sender, EventArgs e)
        {
            textBoxCurrUserName.Text = currUser.name;
            textBoxCurrUserAge.Text = currUser.age.ToString();
        }
При ее нажатии в текстовые поля выйдет информация о том пользователе, который залогинился.

А дальше надо продумывать конкретный алгоритм и переносить его в код.
1
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
11.08.2015, 01:18
http://nullpro.info/2013/rabot... figuracii/

Если любишь 50 оттенков серого, то это для тебя.

Тупо храни в конфиге xD
1
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
11.08.2015, 05:33
Json .NET и формат json и нет ничего проще

Добавлено через 21 минуту
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;
 
namespace ConsoleApplication1
{
    public class UserInfo
    {
        public string Name { get; set; }
        public string Role { get; set; }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            var listUserInfo = new List<UserInfo>
            {
                new UserInfo {Name = "Administrator", Role = "Administrators"},
                new UserInfo {Name = "Guest", Role = "Guests"}
            };
            var jsonDataWrite = JsonConvert.SerializeObject(listUserInfo);
            File.WriteAllText("settings.json", jsonDataWrite);
            var jsonDataRead = File.ReadAllText("settings.json");
            var settings = JsonConvert.DeserializeObject<List<UserInfo>>(jsonDataRead);
        }
    }
}
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.08.2015, 10:31
Zhavoronkov5, Захотел значит пользователь сменить возраст - пересоздаем всего пользователя? Потому как структуры настоятельно рекомендуется делать readonly

Реально, что за экономия на спичках. Даже если будет миллион пользователей, разница между структурой и классом будут ничтожна.

агерон, можно просто нахреначить BinaryFormatter и не париться.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
11.08.2015, 10:40
конечно можно и BinaryFormatter но это не всегда удобно , JSON - он просто дружелюбнее для человека, да и в Web проектах не всегда BinaryFormatter можно заюзать для сериализации
0
 Аватар для Zhavoronkov5
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
11.08.2015, 11:06
Psilon, currUser.age = 98, нет? Я думаю, что автор делает что-то типа расписания пар в универе, а не систему авторизации в Яндексе. Так что смысл использовать структуры только для чтения?

А вот что для новичка очень важно: структуры - объектовый тип, классы - ссылочный. Вот на таком вполне логичном коде легко зафакапиться:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            User sasha = new User();
            sasha.name = "Саша";
            sasha.age = 18;
 
            User vova = new User();
            vova.name = "Вова";
            vova.age = 31;
 
 
            User currUser = new User();
            currUser = vova;
 
            //  Что-то долго делаем.
 
            currUser.name = "Петя";
 
            //  Что-то еще делаем.
 
            Console.WriteLine(vova.name);   //  вот тут с классами будет сюрприз.
            Console.ReadLine();
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
11.08.2015, 11:18
Цитата Сообщение от Zhavoronkov5 Посмотреть сообщение
Вот на таком вполне логичном коде легко зафакапиться
И что? Зафакапится, почитает, расфакапится. Если не смог расфакапиться, это уже лично его проблемы. Тут ничего сложного нет, это элементарно вообще понять. И это вообще изначально нужно знать, а отмазываются, что
-Нет времени читать, да мне надо игру успеть написать!
Чисто лентяи.

Это явно не повод использовать структуры и явно не стоит учить изначально обращаться напрямую к полям.

Добавлено через 25 секунд
И вообще параллельно, что это простой пример. Не стоит обращаться и всё.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.08.2015, 12:40
Цитата Сообщение от Zhavoronkov5 Посмотреть сообщение
currUser.age = 98, нет? Я думаю, что автор делает что-то типа расписания пар в универе, а не систему авторизации в Яндексе. Так что смысл использовать структуры только для чтения?
А вот что для новичка очень важно: структуры - объектовый тип, классы - ссылочный. Вот на таком вполне логичном коде легко зафакапиться:
Например по этой причине, угадайте, что выведет этот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
 
struct User
{
    public string name;     //  имя пользователя.
    public int age;         //  возраст.
 
    public void HappyBirthday()
    {
        age++;
    }
}
 
class Email
{
    public string Address;
    public User User { get; private set; }
 
    public Email(string address, User user)
    {
        User = user;
        Address = address;
    }
}
public class Program
{
 
    static void Main(string[] args)
    {
        var email = new Email("someuser@mail.ru", new User() { age = 17, name = "Вася" });
 
        Console.WriteLine("Пользователью {0} с почтовым ящиком '{1}' {2} лет!", email.User.name, email.Address, email.User.age);
        Console.WriteLine("Поздравим его с днем рожденья!");
        email.User.HappyBirthday();
        Console.WriteLine("Теперь он может отметить его с шампанским, ведь теперь ему {0} лет!", email.User.age);
 
        Console.WriteLine("Посчитаем, сколько ему будет через 10 лет?");
        for (int i = 0; i < 10; i++)
        {
            email.User.HappyBirthday();
        }
 
        Console.WriteLine("Возраст пользователя {0} через 10 лет - {1}!", email.User.name, email.User.age);
    }
}
Добавлено через 2 минуты
агерон, веб - это другой вопрос. Тем более, не нужно интегрироваться с клиентской стороной и прочими сторонними средствами, тупо внутренний формат для своих нужд, никуда более не передающийся, BinaryFormatter как раз для таких вещей идеален.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
11.08.2015, 14:56
Psilon, я так понимаю, что в вышеприведённом примере "проблемное" место - это
C#
1
email.User.HappyBirthday();
При обращению к свойству, что аналогично вызову метода User GetUser() { return user; } структура копируется и "наружу" возвращается её копия, над этой копией производится манипуляция (HappyBirthday()), далее по коду мы опять получаем копии той структуры, которая внутри класса, и которая не менялась (выводим возраст и имя). Короче, чтобы значения сохранялись, нужно изменяя поля структуры, классу присваивать эту изменённую структуру целиком, так как даже во время присваивания изменённая структура скопируется в поле класса.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.08.2015, 16:31
Casper-SC, это не "проблемное", а полноценно проблемное место. Method chain используется очень часто, как и property chain. Сколько раз я сталкивался, что например в interop'е с офисом нельзя написать просто
C#
1
doc.Worksheets[1].Sheet[2].Cell("a", "1") = "hello world";
обязательно нужно присваивать во временные переменные, иначе документ не получится закрыть. Или вот например сейчас вот я код писал секунду назад:
C#
1
web.Lists[listName].Fields.GetFieldByInternalName(taxonomyFieldName) as TaxonomyField;
Боюсь представить, если бы "экономщики" стали бы использовать структуры вместо классов.

Эрик не раз говори, и я полностью разделяю его мнение - структуры надо использовать там, где они семантически подходят, а не в попытке сэкономить 4 байта на указателе. То есть где маленькие неизменяемые объекты. Как только начинаем использовать мутабельные структуры, получаем привет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.08.2015, 16:31
Помогаю со студенческими работами здесь

Получение информации из профиля Twitter
Мне нужно создать консольное приложение на С# с использованием библиотеки Twitter`a, которое могло бы по id какого-либо пользователя...

Создание профиля и добавление функций
Добрый вечер! Я новичок в php) Подскажите пожалуйста можно ли с помощью php создать систему профилей пользователей? Пользователи могут...

Не получается создание профиля пользователя
код выводит что код не верный echo off ::название профиля sеt nazvanieProfilya=%1 ::upn имя входа профиля ::samid имя учётной...

Создание профиля и добавление функций
Добрый вечер! Я новичок в php) Подскажите пожалуйста можно ли с помощью php создать систему профилей пользователей? Пользователи могут...

Полное копирование профиля в новые профиля, после sysprep. Win7 pro
Доброго дня, нужна помощь Нужно создать образ, с предустановленным ПО и настройками программ, и так еще по мелочам в духе стиля...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru