Ответы пользователя по тегу C#
  • Как создать таск-менеджер на C#?

    makarenya
    @makarenya
    программист
    using System;
    using System.Collections.Generic;
    
    // Давайте договоримся, что для нас не имеет значения,
    // как именно сохранены данные. Это может быть json, xml
    // А может оказаться что это БД или бинарнас сериализация
    // Главное, что данные можно получить через вот этот интерфейс
    public interface IDataRecord {
    	// Возвращает какое-нибудь свойство запуска
    	// Это может быть путь к паке или там количество итераций
    	// С точки же зрения xml или json - это значение аттрибута 
    	// с именем name
    	string Get(string name);
    }
    
    // А вот этот интерфейс содержит те методы, которые нам надо вызывать
    public interface IProcessor
    {
    	void MakeChildrenHappy(int numberOfCandys, bool haveClown, string place);
    	void BeatAllJedis(string weapoonName, bool killThem, int timeout);
    }
    					
    public class Program
    {
    	public static void Main()
    	{
    		var taskList = LoadTasks();
    		var processor = CreateProcessor();
    		foreach(var task in taskList) 
    		{
    			var type = task.Get("type");
    			switch(type)
    			{
    				case "make_children_happy":
    					RunMakeChildrenHappy(processor, task);
    					break;
    				case "beat_all_jedis":
    					RunBeatAllJedis(processor, task);
    					break;
    			}
    		}
    	}
    	
    	public static void RunMakeChildrenHappy(IProcessor processor, IDataRecord task)
    	{
    		var numberOfCandys = int.Parse(task.Get("number_of_candys"));
    		var haveClown = bool.Parse(task.Get("have_clown"));
    		var place = task.Get("place");
    		processor.MakeChildrenHappy(numberOfCandys, haveClown, place);
    	}
    	
    	public static void RunBeatAllJedis(IProcessor processor, IDataRecord task)
    	{
    		var weapoonName = task.Get("weapoon_name");
    		var killThem = bool.Parse("kill_them");
    		var timeout = int.Parse("timeout");
    		processor.BeatAllJedis(weapoonName, killThem, timeout);
    	}
    
    	public static List<IDataRecord> LoadTasks() 
    	{
    		// TODO: на самом деле мы тут подгружает json или xml, или из БД читаем
    		// Но пример то не про форматы сохранения.
    		return null;
    	}
    	
    	public static IProcessor CreateProcessor()
    	{
    		// TODO: Ну а тут мы создаём класс, который реализует методы, которые 
    		// нам надо вызывать
    		return null;
    	}
    	
    }
    Ответ написан
    Комментировать
  • Почему возвращает null при использовании метода объекта обобщенного класса?

    makarenya
    @makarenya
    программист
    Не вижу всего кода, но из того что вижу самое вероятное - не запускается Repletion. А если она не запускается, то метод Get ничего и не вернёт, так как AllItem окажется пустым. Добавьте в тесте ещё одну проверку до получения элемента - на то что AccountBS.AllItem не пустой массив
    Ответ написан
    Комментировать
  • Как скруглить углы у элемента WPF?

    makarenya
    @makarenya
    программист
    Наиболее оптимальный способ - вручную прорисовывать шаблон элемента. Той же кнопки, к примеру.
    Первая попавшаяся ссылка с вменяемым по размеру примером:
    https://professorweb.ru/my/WPF/Template/level17/17...
    Общая суть:
    Нужно указать параметр Template у объекта, углы которого скруглять вздумали.
    Это можно сделать как в примере на странице через ссылку на StaticResource, либо по месту, указав
    <Button.Template>
    ...
    </Button.Template>

    Сам шаблон описывается элементом <ControlTemplate TargetType="Button">. Ну или не Button, а тот элемент, который вы хотите выдать.
    Внутри вы можете нарисовать кнопку так, как вам того хочется. Можно <Rectangle RadiusX="10" RadiusY="10">, можно <Border CornerRadius="10"> - на ваше усмотрение. Не забываете добавить <ContentPresenter>, чтобы отобразить содержимое кнопки (её текст или любые другие элементы, которые на ней должны размещаться). В реальности вам придётся ещё впоследствии добавить раскраску в зависимости от состояния (активная, курсор наведён, курсор не наведён), и возможно анимацию перехода между этими состояниями!

    Чтобы не делать это всё с нуля, часто бывает удобно скопировать стиль по-умолчанию с сайта майкрософт , а потом перкроить его на свой вкус.

    Blend так ни разу и не довелось использовать. Всё-таки мне показалось более удобным работать с чистым кодом. Вся идея бленда заключалась на мой взгляд в том, чтобы посадить за него дизайнера, и чтобы последний выдавал на нём готовые для использования блоки. Программеру он ни к чему.
    Ответ написан
    2 комментария