KOP-PIbd-32-Katysheva-N-E/ComponentsLibrary/ListBoxValues.cs
2024-09-16 20:52:42 +04:00

73 lines
2.2 KiB
C#

using System.Reflection;
using System.Text.RegularExpressions;
namespace ComponentsLibrary
{
public partial class ListBoxValues : UserControl
{
//private List<Employee> _employees;
private string layoutString = string.Empty;
private char startSymbol = '{';
private char endSymbol = '}';
private List<object> items = new List<object>();
public ListBoxValues()
{
InitializeComponent();
}
//Публичное свойство для установки и получения индекса выбранной строки (set, get).
public int SelectedIndex
{
get { return listBox.SelectedIndex; }
set { listBox.SelectedIndex = value; }
}
// Публичный метод для установки макетной строки и символов
public void SetLayout(string layout, char startChar, char endChar)
{
layoutString = layout;
startSymbol = startChar;
endSymbol = endChar;
}
// Публичный метод для заполнения ListBox
public void FillListBox<T>(IEnumerable<T> itemList)
{
listBox.Items.Clear();
items.Clear();
foreach (var item in itemList)
{
items.Add(item);
string displayText = CreateDisplayText(item);
listBox.Items.Add(displayText);
}
}
// Метод для создания строки на основе макета
private string CreateDisplayText(object item)
{
string text = layoutString;
// Регулярное выражение для поиска имен свойств
var regex = new Regex($@"{startSymbol}(\w+){endSymbol}");
return regex.Replace(text, match =>
{
string propertyName = match.Groups[1].Value;
PropertyInfo prop = item.GetType().GetProperty(propertyName);
if (prop != null)
{
return prop.GetValue(item)?.ToString() ?? string.Empty;
}
return match.Value; // Возвращаем то, что нашли, если свойства нет
});
}
// Публичный параметризованный метод для получения объекта из выбранной строки
public T GetSelectedItem<T>()
{
if (listBox.SelectedIndex != -1)
{
return (T)items[listBox.SelectedIndex];
}
return default;
}
}
}