Задать вопрос
  • C#. Как посчитать количество слова из словаря в тексте?

    Reise1, я быпоставил брейк на строки
    line1 = sr1.ReadLine();
    textBox1.Text = "не работает";
    и посмотрел бы, зайдёт ли на эти строки.
  • C#. Как посчитать количество слова из словаря в тексте?

    Написал это, но оно считает неправильно

    В чём именно неправильно?
    Может, вы не учитываете верхний и нижний регистр? ищете "bad", но не находит "Bad"?
  • Как сделать вывод key и value из словаря в label?

    ase2015, переименуйте хоть уж label(18-22,28-32) в recordName(0-4) и recordValue(0-4)
  • Как заменить элементы в строке C#?

    estry, вот такой вариант будет проще всего - разделяем исходную строку по разделителю, и соединяем обратно по новому слову:
    var word = "текст";
    var replaceTo = "ТЕКСТОВЫЙ";
    var res2 = string.Join(replaceTo, s.Split(new[] { word }, StringSplitOptions.None));

    Но не будет разбиения по целым строкам, то есть "текстовый" заменит на "ТЕКСТОВЫЙовый".
  • Как заменить элементы в строке C#?

    estry, обратите внимание, что я результат в отдельную переменную поместил. Не изменяйте исходную строку, тогда не будет съезжания. Лучше сразу изменять в отдельную переменную сразу же, в том же цикле.
    Или заменять нужно по более сложному алгоритму:
    var res2 = s.Substring(0, words[0]);
    for (var i = 0; i < words.Count; i++)
    {
        // позиция следующего слова
        var nextPoint = i + 1 < words.Count ? words[i + 1] : s.Length;
        // кол-во символов между текущим и следующим словом
        var count = nextPoint - words[i] - word.Length;
        // собираем результат по фрагментам
        res2 += replaceTo + s.Substring(words[i] + word.Length, count);
    }
  • C# Индексатор массива объектов - почему так (см.)?

    Олег Остапчук, индексаторы - просто инструмент. Он не делает ничего такого, чего нельзя делать без них. Индексаторы предлагают классу дать возможность выглядеть как массив. Просто теперь, когда увидите необходимость получить доступ в классе по индексу (или ключу), то будете думать о индексаторе, в том числе. Но индексатор не всегда удобен, иногда лучше взять именованный метод (чтобы было понятнее, что делается). В вопросе хороший вариант - класс списка людей, и по индексатору доступ к конкретному человеку. Удобно и понятно. А вот получить доступ к имени человека - хоть и возможно, но было бы непонятно.

    Несколько замечаний:
    1) в классе может быть несколько индексаторов, отличающихся типом индекса. Отличать по типу результата нельзя, так же, как у перегрузки метода.
    2) если делаете индексатор, то может быть полезно добавить классу интерфейс IEnumerable<T>, чтобы можно было использовать класс в foreach.
    3) Многие системные классы с индексатором бросают исключение в теле индексатора (например, в геттере). Часто это удобно, но иногда удобнее вернуть null. См. статьи 1 и 2
  • Как в этом коде textbox'а сделать,чтобы можно было нажимать клавишу backspace(стереть)?

    goldolov_na
    1) e.KeyChar != (char)Keys.Back то же самое, что и Symbol != "\b", потому что (char)Keys.Back == '\b' будет истина. Но первый вариант чуть лучше тем, что явно указана клавиша - явное лучше неявного, ведь кто-то может не знать, что за \b.

    2) какая строчка лучше?
    if (!Regex.Match(Symbol, @"[а-яА-Я]").Success && (Symbol != "\b"))
    или
    if ((Symbol != "\b") && !Regex.Match(Symbol, @"[а-яА-Я]").Success)
    Формально, они идентичны, в программе ничего не изменится, если изменить первую на вторую. Но если первая проверка покажет ложь, то вторая проверка вообще не будет выполняться. А regex - операция довольно медлительная. То есть, вторая строка обработается быстрее, потратится меньше ресурсов процессора. Благо, разница в 1-2 миллисекунд, и пользователь не заметит разницы, но подобная разница может быть заметна в длинных циклах.
  • Как в этом коде textbox'а сделать,чтобы можно было нажимать клавишу backspace(стереть)?

    goldolov_na, кстати, да, интересное решение! можно сделать в одно условие:
    if (e.KeyChar != (char)Keys.Back && !Regex.Match(Symbol, @"[а-яА-Я]").Success )
    {
        e.Handled = true;
    }

    В KeyPress приходят некоторые управляющие символы - Backspace, Enter, Esc, у которых есть соответствующий символ в ASCII. Но остальные управляющие клавиши (Ctrl, Alt, Shift, Del, Insert и пр.), а также отличить цифры на дополнительной клавиатуре - можно поймать только в KeyDown.
  • Какие есть варианты создать бесконечного полотна PictureBox?

    pictureBox.Image = new Bitmap(G.GetBitmap(), new Size((int)(G.GetBitmap().Width * valueSize), (int)(G.GetBitmap().Height * valueSize)));

    Вы три раза вызываете три разных новых битмапа (или что делает метод G.GetBitmap?). Скорее всего, лучше один раз вызвать метод, сохранить в переменную, и потом три раза вызывать этот битмап из переменной.
  • Какие есть варианты создать бесконечного полотна PictureBox?

    При перемещении мыши вы передвигаете сам pictureBox? не перемещаете картинку в нём. а двигаете контрол, который показывает картинку? И проблема в том, что pictureBox "заканчивается" и показывается фон окна?
  • Как сделать привязку данных по выбору?

    В конвертер (в привязку) нужно передать ссылку на объект, в котором два нужных свойства. Если свойство находится в текущем датаконтексте, значит, привязка без артибута Path {Binding Converter={StaticResource MyConv}} передаст в конвертер ссылку на текущий датаконтекст. Теперь его можно использовать в конвертере для получения нужного свойства.
    public class MyConv : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var vm = value as MyViewModel;
            if (vm == null) return Binding.DoNothing;
    
            var config = System.Configuration.ConfigurationManager.AppSettings["MySetting"];
            return config != null && config.ToLower() == "first" 
                ? vm.FirstProperty 
                : vm.SecondProperty;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Binding.DoNothing;
        }
    }

    А можно хранить данные где-то ещё - в статическом свойстве, в синглтоне, получить через IoC, создать объект класса, который умеет получать нужное значение. Тогда в таком конвертере не обязательно использовать переданное значение в аргументе value.
  • Как сделать привязку данных по выбору?

    Sneiksus, без разницы, просто текущий датаконтекст {Binding Converter={StaticResource MyConv}}
  • Как переписать OdbcCommand для массовой вставки?

    Да, PhpMyAdmin так и делает, когда создаёт дамп.
  • Что важней текст или файл?

    Так делают все лидеры download-ниши

    Так вот они это делают!
  • Как загрузить UserControl при клике на элемент ListBox?

    Список объектов DevList в MainVm. Они показываются в ListBox-е.
    При выборе с помощью свойства SelectedItem выбранный элемент ставится датаконтекстом внутрь ContentControl, который имеет два шаблона, которые показываются в зависимости от типа объекта.

    Всё работает, только что проверил.
  • Как загрузить UserControl при клике на элемент ListBox?

    Вьюмодели:
    public abstract class BaseViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
    
        protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
        {
            var propertyChangedHandler = PropertyChanged;
            if (propertyChangedHandler != null)
            {
                propertyChangedHandler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    public class DevVm : BaseViewModel
    {
        private string _title;
    
        public string Title
        {
            get
            {
                return _title;
            }
            set
            {
                _title = value;
                RaisePropertyChanged();
            }
        }
    }
    class SuperDevVm : DevVm
    {
        public int Value { get; set; }
    }
    public class MainVm : BaseViewModel
    {
        private readonly ObservableCollection<DevVm> _devList = new ObservableCollection<DevVm>
        {
            new DevVm {Title = "123"},
            new DevVm {Title = "234"},
            new SuperDevVm {Title = "345", Value = 100500},
            new SuperDevVm {Title = "543", Value = 500100},
        };
    
        private DevVm _selectedItem;
    
        public ObservableCollection<DevVm> DevList
        {
            get
            {
                return _devList;
            }
        }
    
        public DevVm SelectedItem
        {
            get
            {
                return _selectedItem;
            }
            set
            {
                _selectedItem = value;
                RaisePropertyChanged();
            }
        }
    }


    WPF:
    <Window x:Class="SimpleWpfApp.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:SimpleWpfApp"
            Title="MainWindow" Height="350" Width="525">
        <Window.DataContext>
            <local:MainVm/>
        </Window.DataContext>
        <DockPanel>
            <ListBox ItemsSource="{Binding DevList}"
                     SelectedItem="{Binding SelectedItem}"/>
            <ContentControl Content="{Binding SelectedItem}">
                <ContentControl.Resources>
                    <DataTemplate DataType="{x:Type local:DevVm}">
                        <TextBlock Text="{Binding Title}"/>
                    </DataTemplate>
                    <DataTemplate DataType="{x:Type local:SuperDevVm}">
                        <TextBlock Background="Red">
                            <TextBlock.Text>
                                <MultiBinding StringFormat="{}{0} ({1})">
                                    <Binding Path="Title" />
                                    <Binding Path="Value" />
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </ContentControl.Resources>
            </ContentControl>
        </DockPanel>
    </Window>
  • Как загрузить UserControl при клике на элемент ListBox?

    Да, всё верно. Раз в листбоксе стоит ItemTemplateSelector, то именно там и заменится стандартный шаблон на указанный.
    В ContentControl есть несколько свойств:
    - Content - устанавливается объект, для которого показывается шаблон. Т.е., данные для шаблона.
    - ContentTemplate - можно явно указать, каким шаблоном показывать этот контент. Если не указан, то wpf попытается найти шаблон по типу контента. Если не нашлось, то использует стандартный шаблон (TextBlock с полным именем класса контента). Чтобы нашёл нужный шаблон, то нужно указать <DataTemplate DataType="{x:Type local:DevVm}"> где-то в ресурсах (прямо в нём или в родителях).
    - ContentTemplateSelector - если шаблоны нужны разные, в зависимости от типа контента или данных в контенте. Используется либо ContentTemplate, либо ContentTemplateSelector, но не оба одновременно.

    Напишите мне в скайп, разберёмся там, что вам надо сделать.
  • Как загрузить UserControl при клике на элемент ListBox?

    Для автоматического выбора контрола в зависимости от типа контента, можно использовать шаблоны (DataTemplate) с указанным типом. См. мой ответ в эту тему. Другой вариант - использовать селектор (ItemTemplateSelector), он сильнее, но и сложнее.