На форме есть listbox, кнопка (при нажатие генерируются ключи RSA)
Задача такая, чтобы при генерации сохранялся приватный ключ, публичный ключ и имя файла оставались в свойствах класса (для дальнейшего обращения)
При выборе элемента имени файла ключа из listbox'a выводить данные выбранного ключа (от имени файла)
Класс RSAKeys
public class RSAKeys
{
public string PublicKeyXML { get; set; }
public string PrivateKeyXML { get; set; }
public string FileName { get; set; }
public RSAKeys(string parPublicXMLKey, string partPrivateXMLKey)
{
PrivateKeyXML = partPrivateXMLKey;
PublicKeyXML = parPublicXMLKey;
}
public RSAKeys() { } // Добавил пустой конструктор, потому что без него просто ругается на добавление аргументов.
public override string ToString() => FileName;
}
Кнопка генерации ключей RSA
private void GenNewKEYS_Click(object sender, EventArgs e) // Button
{
using (RSA rsa = new RSACryptoServiceProvider(2048)) // Generate a new 2048 bit RSA key
{
string publicKeyXML = rsa.ToXmlString(true); // Открытый ключ RSA
string PrivateKeyXML = rsa.ToXmlString(false); // Закрытый ключ RSA
string fname = Path.GetFileName("PrivateKey_#1"); // Тут рандомно сохраняется путь до приватного ключа
//RSAKeys key = new RSAKeys();
RSAKeys key = new(publicKeyXml, fname);
rsaKeys.Add(key);
File.WriteAllText(fname+".xl", PrivateKeyXML);
listBox1.Items.Add(rsaKeys); // Добавляю в listBox отображение имени файла приватного ключа
}
}
Далее
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//RSAKeys key = new();
// string curKey = listBox1.SelectedItem.ToString();
RSAKeys curKey = (RSAKeys)listBox1.SelectedItem;
// через curKey нужно сделать обращение с выбранным ключём чтобы он отображал все нужные данные.
}
Но получаю ошибки на null и
System.InvalidCastException: Не удалось привести тип объекта "System.String" к типу "RSAKeys".
SelectedValue– aepot Oct 29 '22 at 00:07System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.- это вlistBox1_SelectedIndexChanged– ZuPoo Switch Oct 29 '22 at 00:11private readonly BindingList<RSAKeys> rsaKeys = new BindingList<RSAKeys>();вместо того списка что у вас. Берете однократно при запуске приложения делаетеlistBox1.DataSource = rsaKeys;, строчкуlistBox1.Items.Add(rsaKeys);удаляете, и готово. – aepot Oct 29 '22 at 00:27RSAKeysбардак, присваиваете в конструкторе одно, отображаете в ToString другое. – aepot Oct 29 '22 at 00:31ToString, вместо этого задайте однократноlistBox1.DisplayMember = "FileName";. Не ленитесь читать документацию, там много всего интересного https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.listbox – aepot Oct 29 '22 at 00:37