Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Сколько лет учиться на программиста?

9821   11 12 13 14 15 16 17 18 19 20 21 все
AlexNek патриот13.09.20 16:58
AlexNek
NEW 13.09.20 16:58 
в ответ Murr 13.09.20 16:18
По крайней мере одна персона будет сильно недовольна.

Я так понимаю один котик будет недоволен?

А чем интересно? Еще же ничего нет?

mollinna знакомое лицо13.09.20 18:40
mollinna
13.09.20 18:40 
в ответ Murr 13.09.20 16:07

Потому что если корабль идёт ко дну, то смысла нет держать сотрудника, если все равно в конечном итоге придётся с ним попрощаться, потратив кучу денег для его содержания.


Я ж не имею ввиду, когда временно заказов нет на пару недель, а когда речь идёт об финансовой устойчивости компании. Тем более, что у умных компаний пара человек сидит в штате и поддерживает рабоспособность имеющегося софта, а все остальные фрилансеры, которых можно на 1-2 или 4-5 дней в неделю привлекать. В зависимости от количества задач.

Если сотрудничество многолетнее (ну там лет 10-20), то едва ли фрилансер далеко убежит. Да и при краткосрочном сотрудничестве фрилансер заказчиков пешим эротическим маршрутом не отправляет, и может вполне вернуться когда задачи появятся. Ну а нет, так незаменимых все же нет

uscheswoi_82 завсегдатай13.09.20 20:25
NEW 13.09.20 20:25 
в ответ AlexNek 13.09.20 15:02

Вот что-то за 5 часов накалякал, проблема только с кортежем, в методе swap_column, т.к. у меня net 3.5:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1 {

public class TSubItem {

public String Text { get; set; }

public int row_id { get; set; }

}

public class SubItem {

private List<TSubItem> Item = null;

public SubItem() {

Item = new List<TSubItem>();

}

public void add_subitem(String text, int row_id) {

Item.Add(new TSubItem() { Text = text, row_id = row_id });

}

public List<TSubItem> get_subitems() {

return Item;

}

}

public class Item {

public int column_id { get; set; }

public int row_id { get; set; }

public String Text { get; set; }

public SubItem subitem { get; set; }

}

public class Header {

public int column_id { get; set; }

public String Text { get; set; }

public int x { get; set; }

}

class Grid {

private List<Item> items;

private List<Header> headers;

private int y = 0;

public Grid() {

items = new List<Item>();

headers = new List<Header>();

y = 1;

}

public void add_header(String text, int x, int column_id) {

headers.Add(new Header() { Text = text, x = x, column_id = column_id });

}

public void add_item(String item, int column_id, int row_id) {

this.add_item(item, column_id, row_id, null);

}

public void add_item(String item, int column_id, int row_id, SubItem si) {

if(si != null)

items.Add(new Item() { Text = item, subitem = si, column_id = column_id, row_id = row_id });

else

items.Add(new Item() { Text = item, column_id = column_id, row_id = row_id});

}

public void swap_column(int column_id, int to_column_id) {

//https://entityframework.net/ru/knowledge-base/33545249/

//https://stackoverrun.com/ru/q/10321290

}

public void render() {

if (headers.Count <= 0 || items.Count <= 0) return;

foreach (var h in headers) {

Console.SetCursorPosition(h.x, 1);

Console.WriteLine(h.Text);

y++;

}

var r = from head in headers join item in items on head.column_id equals item.column_id select new { subitem = item.subitem, x = head.x, y = item.row_id, Text = item.Text };

foreach (var item in r) {

Console.SetCursorPosition(item.x, item.y);

Console.WriteLine(item.Text);

if (item.subitem != null) {

foreach (var subitem in item.subitem.get_subitems()) {

Console.SetCursorPosition(item.x, subitem.row_id);

Console.Write(" " + subitem.Text);

}

}

}

}

}

class Program {

static void Main(string[] args) {

SubItem si = new SubItem();

si.add_subitem("xx", 3);

si.add_subitem("yy", 4);

Grid g = new Grid();

g.add_header("Firstname", 1, 1);

g.add_header("Lastname", 30, 2);

g.add_header("Birhday", 30, 3);

g.add_item("AA", 1, 2, si);

g.add_item("BB", 2, 2);

g.add_item("CC", 1, 5);

g.render();

for(int j = 0; j < 5; j++) Console.WriteLine("");

Console.ReadKey();

Console.Clear();

g.swap_column(2, 1);

g.render();

for (int j = 0; j < 5; j++) Console.WriteLine("");

}

}

}

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
uscheswoi_82 завсегдатай13.09.20 20:28
NEW 13.09.20 20:28 
в ответ uscheswoi_82 13.09.20 20:25, Последний раз изменено 13.09.20 20:42 (uscheswoi_82)

Дальше в WPF Grid и StackPanel:

private void Window_Loaded(object sender, RoutedEventArgs e){

StackPanel sp = new StackPanel();

for (int j = 0; j < 10; j++) sp.Children.Add(new TextBlock() { Text = "Item" + j});

this.Content = sp;

}

Только вот это StackPanel sp = new StackPanel();

в метод render() запихиваем.


Если рисовать хотите то так:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Globalization;

namespace WpfApplication2 {

public class MyCTL : UIElement {

public MyCTL() {}

protected override void OnRender(DrawingContext dc)

{

dc.DrawText(new FormattedText(headers.Caption, CultureInfo.GetCultureInfo("de-de"), FlowDirection.LeftToRight, new Typeface("Times New Roman"), 15, Brushes.Black), new Point(10f, 10f));

}

}

public partial class Window1 : Window {

public Window1() {

InitializeComponent();

}

private void Window_Loaded(object sender, RoutedEventArgs e) {

MyCTL m = new MyCTL();

this.Content = m;

}

}


только запихиваете в OnRender


PS. для компактного кода, в предыдущем примере переделываем так:

foreach (var item in from head in headers join item in items on head.column_id equals item.column_id select new { subitem = item.subitem, x = head.x, y = item.row_id, Text = item.Text })

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
AlexNek патриот13.09.20 21:07
AlexNek
NEW 13.09.20 21:07 
в ответ uscheswoi_82 13.09.20 20:28

Что то я связи не понял между ВПФ и консолью.

Делать нужно не на скорость, а на качество. Вы хоть демки смотрели, что гриды могут?

Вот немного облагородил Ваш проект

AlexNek патриот13.09.20 21:09
AlexNek
NEW 13.09.20 21:09 
в ответ uscheswoi_82 13.09.20 20:25
у меня net 3.5

Ну уже 4.0 мало где используется,, только если какие то жесткие ограничения.

uscheswoi_82 постоялец13.09.20 21:15
NEW 13.09.20 21:15 
в ответ AlexNek 13.09.20 21:07, Последний раз изменено 13.09.20 21:21 (uscheswoi_82)

Логику тестировал в консоли, чтобы быстрее отлаживаться. Я много времени потратил, т.к. хотел сделать в стиле Visual Basic 6. По событию Mouse_Down нужно вызывать метод swap_column, а там нужно использовать кортеж https://docs.microsoft.com/ru-ru/dotnet/api/system.tuple-2.... Сегодня устал, завтра продолжу.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
AlexNek патриот13.09.20 21:28
AlexNek
NEW 13.09.20 21:28 
в ответ uscheswoi_82 13.09.20 21:15
хотел сделать в стиле Visual Basic 6.

А зачем? Кроме рвотного рефлекса VB6 ничего не вызывает.


https://docs.microsoft.com/en-us/dotnet/standard/design-gu...

AlexNek патриот13.09.20 21:37
AlexNek
NEW 13.09.20 21:37 
в ответ uscheswoi_82 13.09.20 21:15

Отдыхайте и не торопитесь.

https://www.codeproject.com/articles/165368/wpf-mvvm-quick...

uscheswoi_82 постоялец13.09.20 22:34
NEW 13.09.20 22:34 
в ответ mollinna 13.09.20 12:13

ABAP каждый школьник знает, в Berufsschule изучают, 16-17 летка освоил ABAP, по окончанию получил работу, в Berufsschule пришёл из Hauptschule. ABAP это обычный Cobolо-образный язык.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
mollinna знакомое лицо13.09.20 23:18
mollinna
NEW 13.09.20 23:18 
в ответ uscheswoi_82 13.09.20 22:34

Разумеется, все легко и просто. Кусок какого-то кода не то что школьник, даже я написать смогу.

Только хорошие абаперы пишут минимум кода, им платят за использование стандартных функциональных модулей, программ, знание таблиц базы данных и далее-далее.

Murr патриот14.09.20 03:40
Murr
NEW 14.09.20 03:40 
в ответ AlexNek 13.09.20 16:58

Я так понимаю один котик будет недоволен?

-----

Нет, не котик.


А чем интересно?

-----

Недоволен будет тот у кого появится больше работы... тот кто не рекомендует...

Murr патриот14.09.20 03:48
Murr
NEW 14.09.20 03:48 
в ответ mollinna 13.09.20 18:40

если корабль идёт ко дну

-----

Если есть пробоина - ее надо заделывать.

Причем заделывать должен тот кто умеет.

daduda местный житель14.09.20 10:46
daduda
NEW 14.09.20 10:46 
в ответ uscheswoi_82 13.09.20 22:34

Abap настолько суров, что его должны знать даже лехи с курсов штаплеров.

AlexNek патриот14.09.20 12:36
AlexNek
NEW 14.09.20 12:36 
в ответ Murr 14.09.20 03:40
Недоволен будет тот у кого появится больше работы...

Почему и откуда появится? Тебя кто то заставляет пользовать то что не нравится?

uscheswoi_82 постоялец14.09.20 17:31
NEW 14.09.20 17:31 
в ответ AlexNek 13.09.20 21:09, Последний раз изменено 14.09.20 17:34 (uscheswoi_82)

Вообще всё равно на чём программировать, у NET есть interop. Многие компоненты делают на Си++. Там нужно рисовать сетку спомощью GDI/GDI+, если добавляеть элементы (т.е. если элимент имеет HWND), то программа будет весить очень много. Но если рисуешь в ScrollViewer, прокрутка почему-то не активируется.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
AlexNek патриот14.09.20 17:47
AlexNek
NEW 14.09.20 17:47 
в ответ uscheswoi_82 14.09.20 17:31
Вообще всё равно на чём программировать,

Ну это может быть вам все равно.

Но мне без CallerMemberName например, будет тоскливо.


Многие компоненты делают на Си++.

Можно, но зачем, когда и на С# всё нормально работает.

Murr патриот14.09.20 19:18
Murr
NEW 14.09.20 19:18 
в ответ AlexNek 14.09.20 12:36

Почему и откуда появится?

-----

Потому как осень... безум

uscheswoi_82 постоялец14.09.20 19:33
NEW 14.09.20 19:33 
в ответ AlexNek 14.09.20 17:47

Я делал сетку спомощью STATIC-элементов см. https://docs.microsoft.com/en-us/windows/win32/controls/st..., программа на STATIC вылетала, если в WPF напихать TextBlock-и https://docs.microsoft.com/ru-ru/dotnet/api/system.windows... то тоже самое произойдёт, сетку рисуют. Да я когда Terminkalender делал спомощью GridLayout, то да вставлял туда Label, но сетка и Terminkalender это разные вещи.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
AlexNek патриот14.09.20 21:01
AlexNek
NEW 14.09.20 21:01 
в ответ uscheswoi_82 14.09.20 19:33
Я делал сетку с помощью STATIC-элементов

Всё нужно делать как положено, хотя нормального описания так пока и не нашел.

Вы главное, не торопитесь и не расстраивайтесь если сразу не получится. Там проблем просто дофига.