• Как обойти дубликат иконки в трее C#?

    aush
    @aush
    В чем именно у вас вопрос? Как из второй формы получить ссылку на первую? Можно передать зависимость при создании, можно через Application.OpenForms["Form1Name"]. Сформулируйте точнее проблему и покажите ваш код.
    Ответ написан
    Комментировать
  • С помощью каких компонетов в c# можно сделать прокручиваемый список изображений?

    aush
    @aush
    Возьмите DataGridView и сделайте в нем одну колонку с картинками msdn.microsoft.com/en-us/library/system.windows.fo...
    Ответ написан
    Комментировать
  • Как попарно соединить вершины многоугольника, что бы линии не пересекались?

    aush
    @aush
    Можно получить список вершин по формулам и по очереди их соеденить. В этом случае линии пересекаться гарантировано не будут.

    IEnumerable<Point> GetPoints(int points) // points - количество вершин
    {
        return Enumerable.Range(0, points)
            .Select(i => 2 * i * Math.PI / points)
            .Select(arg => new Point
            {
                X = Math.Cos(arg), 
                Y = Math.Sin(arg)
            });
    }
    
    struct Point
    {
        public double X;
        public double Y;
    }


    UPD: стало интересно, решил немного порисовать. Получаются примерно такие картинки ppppp.png

    По вашему комменту я так и не понял, что именно вы хотите сделать, но если интересно, можете глянуть код: архив с проектом (код лепил по мере появления идей, поэтому имеется некоторая каша; если что будет непонятно - спрашивайте).
    Ответ написан
    Комментировать
  • C# WPF - как контрол мог привязаться к реестру?

    aush
    @aush
    При желании и не такое можно написать.

    Вашего описания совершенно недостаточно, чтобы понять, в чем проблема. Попробуйте воспроизвести ситуацию на минимальном примере и покажите его. Если сделать пример не получится, попробуйте из вашей программы постепенно выкидывать все, не относящееся к делу, до тех пор, пока эффект не начнет пропадать и, опять же, выложите пример или, хотя бы, основные куски кода.
    Ответ написан
  • Есть ли в C# аналог numeric_limits из C++?

    aush
    @aush
    У числовых типов в .Net есть статические поля MinValue и MaxValue, поэтому вашу задачу можно решить рефлексией:

    public class MyNumeric<T> where T : struct, IComparable<T>, IEquatable<T>, IConvertible
    {
      public static readonly T MaxValue = ReadStaticField("MaxValue");
      public static readonly T MinValue = ReadStaticField("MinValue");
    
      private static T ReadStaticField(string name)
      {
        FieldInfo field = typeof(T).GetField(name, BindingFlags.Public | BindingFlags.Static);
        if (field == null)
        {
          throw new InvalidOperationException("Нечисловой тип: " + typeof(T).Name);
        }
        return (T)field.GetValue(null);
      }
    }


    Соответственно, использование:

    Console.WriteLine(MyNumeric<int>.MaxValue);
    Console.WriteLine(MyNumeric<float>.MinValue);
    Ответ написан
    1 комментарий
  • C#. Как оптимально удалить переходы на новую строку?

    aush
    @aush
    @lam0x86 прав, операции со строками достаточно оптимизированы в .net и в очень редких случаях вам может понадобиться дополнительная оптимизация. Я проверил и result = result.Replace("\n", "") работает быстрее представленных вариантов.

    На самом деле, Replace помечен атрибутом [MethodImpl(MethodImplOptions.InternalCall)], т.е. он оптимизирован на уровне CLR, так что врядли без какой-то специфичной оптимизации под вашу задачу и unsafe кода можно сделать его быстрее.

    Вариант со StringBuilder из комментария работает, кроме специфичных случаев, в ~3 раза медленнее Replace, так что не стоит заморачиваться.
    Ответ написан
    1 комментарий
  • Как сохранить состояние ViewModel после навигации на такую же страницу с другими параметрами для ViewModel?

    aush
    @aush
    Вам не нужно сохраняться предыдущие состояния и перебрасывать их между вьюхами. Хорошая архитектура такая: у вас есть репозиторий, в котором находятся данные о комнатах, комнаты вы можете уникально идентифицировать. Когда вы хотите отобразить вьюху для комнаты с заданным идентификатором, вы запрашиваете у репозитория доменную модель комнаты, мапите ее на вьюмодель и используете эту вьюмодель для отображения вьюхи. Т.о. у вас не будет такого понятия как "переход от вьюхи одной комнаты к другой", у вас есть просто "отображение вьюхи для данной комнаты".
    Ответ написан
    1 комментарий
  • Взаимодействие программы с системой. Как такое сделать?

    aush
    @aush
    Реализуемо. Для этого конкретного примера вам нужно будет поставить глобальный хук через WinAPI (blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx, https://gist.github.com/Stasonix/3181083)

    Хук нужно использовать, если вы хотите, чтобы этот функционал работал и в ситуации, когда пользователь копирует из любой другой программы, не только вашей (ваша в это время работает в фоне).
    Ответ написан
    5 комментариев
  • Поиск последнего дочернего элемента и добавление следующего в xml-документе, ошибка в логике?

    aush
    @aush
    Элементы не находятся из-за неймспейсов. Я не спец в этом, работа с xml с неймспейсами мне всегда казалась какой-то мистикой, но вот так работает:

    var xml = XDocument.Parse(
    @"<?xml version='1.0' encoding='utf-8'?>
    <!-- This is a SCORM 1.2 manifest file, created 9/1/2014 1:52:58 PM by semina using CourseLab 140211 -->
    <manifest xmlns='http://www.imsproject.org/xsd/imscp_rootv1p1p2' xmlns:adlcp='http://www.adlnet.org/xsd/adlcp_rootv1p2' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation=' http://www.imsproject.org/xsd/imscp_rootv1p1p2 imscp_rootv1p1p2.xsd http://www.adlnet.org/xsd/adlcp_rootv1p2 adlcp_rootv1p2.xsd' identifier='MANIFEST-5D060C55_4EC0_4E49_8D2F_F5C934FFEDAD' version='1.0'>
      <title>Технолог подсистемы САДД БР. Работа с модулем «Справочники»</title>
      <item identifier='im_1' identifierref='RES1' parameters='?width=1152&amp;height=920'>
        <title>Информационный материал</title>
      </item>
      <item identifier='im_1' identifierref='RES1' parameters='?width=1152&amp;height=920'>
        <title>Информационный материал</title>
      </item>
    </manifest>");
    
    var ns = xml.Root.GetDefaultNamespace();
    
    foreach (var element in xml.Root.Descendants().Where(e => e.Name == ns + "item"))
    {
        var last = element.Elements().Last();
        if (last.Name == ns + "title")
        {
            last.AddAfterSelf(
                new XElement("track", 
                    new XAttribute("id", ""), 
                    new XAttribute("genre", "Break Beat")));
        }
    }
    Ответ написан
    1 комментарий
  • Всегда ли нужно вызывать EndExecuteReader?

    aush
    @aush
    Советую вам изучить паттерны асинхронного программирования, сейчас у вас каша. Можете начать отсюда msdn.microsoft.com/en-us/library/jj152938(v=vs.110...

    BeginExecuteReader и EndExecuteReader реализуют устаревшую на данный момент модель Asynchronous Programming Model (APM).

    SqlDataReader реализует IDisposable, поэтому, если операция успешно завершилась, вам следует вызвать у него Dispose(), когда вы закончите с ним работать.
    Ответ написан
  • Как из программы на C# создать оверлей (на подобии RaidCall)?

    aush
    @aush
    Делал нечто подобное. Суть в том, что у формы есть стили, которые надо задать через WinAPI. При установке этих стилей на форме можно будет рисовать, она будет отображаться поверх всех окон, но при этом будет прозрачна для мыши. Мне не нужны были контролы на форме, поэтому я к тому же делал ее и визуально прозрачной и просто рисовал на ней через Graphics (в итоге получался как раз описанный вами эффект оверлея, когда во время игры поверх нее в углу отображалась некоторая информация и по нажатию горячей клавиши можно было переключать различные варианты индикации), можете поэксперементировать, но, в любом случае, вы можете заменить ваши контролы на горячие клавиши, а на форме только рисовать/выводить текст.

    Ознакомьтесь с этой статьей - www.codeproject.com/KB/vb/ClickThroughWindows.aspx
    Если после прочтения все еще будет что-то не понятно, по крайней мере будете знать в каком направлении гуглить.
    Ответ написан
    3 комментария
  • Каким способом лучше хранить большое количество константных значений в C#?

    aush
    @aush
    Для таких вещей есть стандартное встроенное средство - ресурсные (.resx) файлы.
    Ответ написан
    Комментировать
  • Как в C# реализовать изменение свойств нескольких компонентов в чужом потоке?

    aush
    @aush
    Я не уверен, что правильно понял ваш вопрос, но попробую предположить, что вы считаете, что Invoke должен вызываться у того контрола, действия с которым вы хотите совершить. Это не так - вы можете вызвать Invoke на любом контроле, который работает в том UI-потоке, контролы в котором вы хотите изменить.

    Т.е. вы можете делать так:

    private void AddTag(bool onstart)
    {
        if (tagList.InvokeRequired)
            tagList.Invoke(new Action(() => BlockUI(onstart)));
        else
            BlockUI(onstart);
    }


    Вместо tagList может быть любой контрол, работающий в этом UI-потоке. Например, пусть у вас на форме три кнопки:

    private void button1_Click(object sender, System.EventArgs e)
    {
    	var t = new Thread(new ThreadStart(() =>
    	{
    		if (button3.InvokeRequired)
    		{
    			button3.Invoke(new Action(() =>
    			{
    				button1.Text = "new button1 name";
    				button2.Text = "new button2 name";
    				button3.Text = "new button3 name";
    			}));
    		}
    		else
    		{
    			button1.Text = "new button1 name";
    			button2.Text = "new button2 name";
    			button3.Text = "new button3 name";
    		}                
    	}));
    	t.Start();
    }


    Кстати, форма тоже является контролом, так что в этом примере можно писать и так:

    private void button1_Click(object sender, System.EventArgs e)
    {
    	var t = new Thread(new ThreadStart(() =>
    	{
    		if (InvokeRequired)
    		{
    			Invoke(new Action(() =>
    			{
    				button1.Text = "new button1 name";
    				button2.Text = "new button2 name";
    				button3.Text = "new button3 name";
    			}));
    		}
    		else
    		{
    			button1.Text = "new button1 name";
    			button2.Text = "new button2 name";
    			button3.Text = "new button3 name";
    		}                
    	}));
    	t.Start();
    }
    Ответ написан
    4 комментария
  • Как соеденить( а так же управлять ) БД и Windows Form на ЯП C# ?

    aush
    @aush
    Я бы посоветовал вам разобраться с Entity Framework и работать с ним. Информации по нему полно, пользоваться просто.
    Ответ написан
    1 комментарий
  • Почему приложение на C# съедает в 5 раз больше ожидаемого объема памяти?

    aush
    @aush
    Возьмите WinDbg, подключите sos/psscor, снимите дамп да посмотрите, что за объекты у вас в памяти. Опыта тут большого не нужно, инфы по анализу .NET-памяти этим способом в инете полно.
    Ответ написан
    Комментировать
  • Какие сборки и пространства имен должен знать хороший .NET программист?

    aush
    @aush
    У вас неправильное понимание ситуации. Я не думаю, что кто-то будет формулировать требование как "знать System.Collections.Generic". Но если вы не можете рассказать чем HashSet<T> отличается от List<T>, то это говорит о вашем опыте, что важно для работодателя.

    Вы хотите стать специалистом в web. В таком случае, чтобы выяснить объем ваших знаний, вам, скорее всего, будут задавать вопросы, для ответы на которые вам надо уметь работать с типами из System.Web. Но ставить себе задачу "выучить System.Web" - не очень продуктивно.
    Ответ написан
    2 комментария
  • В чём разница dynamic vs Object в C#.NET?

    aush
    @aush
    Разница в том, что для dynamic вы можете написать
    dynamic myDinamic = GetDynamic();
    myDynamic.SomeMethod();


    Object же надо приводить в типу, для которого определен SomeMethod(), или использовать рефлексию. Т.е. проверка переносится с этапа компиляции на момент исполнения.
    Ответ написан
    1 комментарий
  • Как заменить символы в строке с помощью c#?

    aush
    @aush
    Код правильный, проверяйте входные данные.
    Ответ написан
  • Как спроектировать дизайн с дублированием элементов интерфейса на C#, WinForms?

    aush
    @aush
    Таб вкладки - это просто кнопка. Сама вкладка - панель, в которую кладутся разные контролы. Таб-контрол - табы-кнопки + панель.

    В чем, вообще, вопрос? Берете форму, кладете на нее "адресную строку", "вперед", "назад", добавляете кнопки для переключения вкладок и панель, на которой будете эти вкладки отображать. Какая именно у вас проблема с "проектированием" этого дизайна?
    Ответ написан
  • Как осуществить параллельное вычисление СЛАУ методом Гауса (C#)?

    aush
    @aush
    Не вдаваясь в качество кода в целом, способ распараллелить - заменить:

    for (int i = 0; i < RowCount - 1; i++)
    {
    	SortRows(i);
    	for (int j = i + 1; j < RowCount; j++)
    	{
    		if (Matrix[i][i] != 0) //если главный элемент не 0, то производим вычисления
    		{
    			double MultElement = Matrix[j][i] / Matrix[i][i];
    			for (int k = i; k < ColumCount; k++)
    				Matrix[j][k] -= Matrix[i][k] * MultElement;
    			RightPart[j] -= RightPart[i] * MultElement;
    		}
    		//для нулевого главного элемента просто пропускаем данный шаг
    	}
    }


    на

    Parallel.For(0, (int)RowCount, i =>
    {
    	SortRows(i);
    	for (int j = i + 1; j < RowCount; j++)
    	{
    		if (Matrix[i][i] != 0) //если главный элемент не 0, то производим вычисления
    		{
    			double MultElement = Matrix[j][i] / Matrix[i][i];
    			for (int k = i; k < ColumCount; k++)
    				Matrix[j][k] -= Matrix[i][k] * MultElement;
    			RightPart[j] -= RightPart[i] * MultElement;
    		}
    		//для нулевого главного элемента просто пропускаем данный шаг
    	}
    });


    Аналогично можно и для второго цикла. У меня загрузка процессора поднимается с ~24% до ~67% в обоих случаях.

    В таких задачах надо брать в руки профайлер, искать узкие места и их оптимизировать. Постановка "а давайте распараллелим и все будет хорошо" в общем случае делает только хуже.
    Ответ написан
    Комментировать