за C#
28 отговора
735 прегледа
за C#
Здравейте!
Начинаещ съм в С# и ще ви помоля за малко помощ по някои въпроси...
1. Как мога да сетна фокуса на някоя контрола при зареждане на формата й? Пробвах в Load и Activate event-ите на формата и в конструктора й - все не става. Изглежда е твърде рано?! Е сигурно има някакъв очевиден начин ама...:)
2. Имам променлива от тип char[]. Как да я конвертирам до string? С neshto.ToString() не става нищо (нищо хубаво). Дали пък не бъркам някъде другаде?
3. В С# няма ли аналог на паскалското With:
Пример: With a do primer(b, c); вместо primer(a.b, a.c);
мерси предварително
Начинаещ съм в С# и ще ви помоля за малко помощ по някои въпроси...
1. Как мога да сетна фокуса на някоя контрола при зареждане на формата й? Пробвах в Load и Activate event-ите на формата и в конструктора й - все не става. Изглежда е твърде рано?! Е сигурно има някакъв очевиден начин ама...:)
2. Имам променлива от тип char[]. Как да я конвертирам до string? С neshto.ToString() не става нищо (нищо хубаво). Дали пък не бъркам някъде другаде?
3. В С# няма ли аналог на паскалското With:
Пример: With a do primer(b, c); вместо primer(a.b, a.c);
мерси предварително
Re: за C#
1. Доколкото си спомням (отдавана не съм писал УинФормс), ако имаш контролка txtInput
Във Form.Load event handler-а , this.ActiveControl = txtInput и/или
Във Form.Activate event handler-а, txtInput.Focus();
2. Защо използваш въобще такива неща? Лично аз не съм ползвал масиви от години, камо ли масив от char? Ползвай System.Collections. Но иначе може:
char [] a;
...
string s = Convert.ToString(a);
3. Няма. Има във ВБ.НЕТ, но не и в С#. Причината поради която няма е че пича който е мислил С#-а се дразни на тази клауза и мисли, че трудно се чете. Друг е въпроса, че същия тоя пич е примерно архитект и на Делфи, където With си има и няма проблеми.
Във Form.Load event handler-а , this.ActiveControl = txtInput и/или
Във Form.Activate event handler-а, txtInput.Focus();
2. Защо използваш въобще такива неща? Лично аз не съм ползвал масиви от години, камо ли масив от char? Ползвай System.Collections. Но иначе може:
char [] a;
...
string s = Convert.ToString(a);
3. Няма. Има във ВБ.НЕТ, но не и в С#. Причината поради която няма е че пича който е мислил С#-а се дразни на тази клауза и мисли, че трудно се чете. Друг е въпроса, че същия тоя пич е примерно архитект и на Делфи, където With си има и няма проблеми.
Re: за C#
1. Пробвах ги и двата варианта още преди да пиша.
2. Ами трябва ми на едно място:) Ще пробвам това
string s = Convert.ToString(a);
А това за Collections как ще ми помогне?
3. Дааам
2. Ами трябва ми на едно място:) Ще пробвам това
string s = Convert.ToString(a);
А това за Collections как ще ми помогне?
3. Дааам
Re: за C#
Ами аз ти казах вече, пробвай поне :) Отваряш формата в дизайн mode, селектваш Пропертис, даваш на евентс (една светкавичка) и дабъл кликваш Лоад евента. Това те праща автоматично тук:
private void Form1_Load(object sender, System.EventArgs e)
{
this.ActiveControl = button2;
}
Пишеш кой контрол искаш да ти е активен (фокусиран) по начина който съм написал горе и това е. Току що го пробвах и работи.
private void Form1_Load(object sender, System.EventArgs e)
{
this.ActiveControl = button2;
}
Пишеш кой контрол искаш да ти е активен (фокусиран) по начина който съм написал горе и това е. Току що го пробвах и работи.
Re: за C#
обяснението със светкавичката не беше нужно;)
значи това беше едно от първите неща които пробвах
незнам защо при мен не бачка... да не би версията която имам да е бъгава... ама толкова елементарен бъг?!
значи това беше едно от първите неща които пробвах
незнам защо при мен не бачка... да не би версията която имам да е бъгава... ама толкова елементарен бъг?!
Re: за C#
Ами нямам представа... най-добре започни нов проект, нещо мое да се е прецакало. Ето пълния соурс който ми генерира Вижуал Студиото, сравни го с твоя
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication3
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(48, 40);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
//
// button2
//
this.button2.Location = new System.Drawing.Point(56, 104);
this.button2.Name = "button2";
this.button2.TabIndex = 1;
this.button2.Text = "button2";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
this.ActiveControl = button2;
}
}
}
Особено внимание обърни на
this.Load += new System.EventHandler(this.Form1_Load);
дали го има... ако го няма Лоад хандлера въобще няма да се извика. При мене бачка - като сменя ActiveControl се фокусира това на което съм го сетнал.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication3
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(48, 40);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
//
// button2
//
this.button2.Location = new System.Drawing.Point(56, 104);
this.button2.Name = "button2";
this.button2.TabIndex = 1;
this.button2.Text = "button2";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
this.ActiveControl = button2;
}
}
}
Особено внимание обърни на
this.Load += new System.EventHandler(this.Form1_Load);
дали го има... ако го няма Лоад хандлера въобще няма да се извика. При мене бачка - като сменя ActiveControl се фокусира това на което съм го сетнал.
Re: за C#
>най-добре започни нов проект, нещо мое да се е прецакало.
Тъжно... като уизърда се издъни и не можем да му оправим бакиите щото не знаем какво произвежда. Толкова по въпроса за РАД програмирането с мишката.
Майкрософт ли са виновни, че вместо да елиминират сложността само я скриват под генерирания код? Не са единствените, които го правят. Знам само, че като за първи път видях региона в кода маркиран като "генериран" и коментара, който казва да не бараш щото там бара уизърда, ми се изправиха косите.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Тъжно... като уизърда се издъни и не можем да му оправим бакиите щото не знаем какво произвежда. Толкова по въпроса за РАД програмирането с мишката.
Майкрософт ли са виновни, че вместо да елиминират сложността само я скриват под генерирания код? Не са единствените, които го правят. Знам само, че като за първи път видях региона в кода маркиран като "генериран" и коментара, който казва да не бараш щото там бара уизърда, ми се изправиха косите.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Re: за C#
Ами трейд-оф, знаеш как е. 80% от девелоперс си дърпат контролки от Туулбокса, селектват ги и им сетват пропертита... тук там някой ред код в някой евент и до там.
Майкрософт се опитват, знаеш, да са мейнстрийм, така че именно за тях предимно е направено новото Вижуал Студио. Не че не можеш да си пишеш всичко и на ръка де, ама в един момент, особено ако знаеш какво се генерира отдолу, дизайн мода на новото Вижуал Студио е действително много продуктивен. Специално Уинформс приложения се пишат буквално за дни. Адски удобно са го направили, ако успееш да минеш първите един-два месеца на аклиматизация, определено е най-доброто ИДЕ с което съм работил.
Майкрософт се опитват, знаеш, да са мейнстрийм, така че именно за тях предимно е направено новото Вижуал Студио. Не че не можеш да си пишеш всичко и на ръка де, ама в един момент, особено ако знаеш какво се генерира отдолу, дизайн мода на новото Вижуал Студио е действително много продуктивен. Специално Уинформс приложения се пишат буквално за дни. Адски удобно са го направили, ако успееш да минеш първите един-два месеца на аклиматизация, определено е най-доброто ИДЕ с което съм работил.
Re: за C#
>буквално за дни
С доста други средства пак могат да се пишат ГУИ приложения за дни
Аз просто мрънкам, че, едва ли не, се проповядва като best practice нещо, което е безумно тъпо. Гледах рекламираните възможности на "новото" студио дето щяло да излиза скоро. Има рефакторинг поддръжка!!! Хеле доживяхме. Обаче има и поддръжка на библиотека с парчета код ( code snippets ), които да избираш за вкарване в кода. Гледах скрийншот - вб девелопера си избира от меню "Read value from registry". Какво прави ако му трябва да прочете стойността на 5 места в програмата - не искам да мисля. Тази простотия е точно в обратен на идеята на рефакторинга дух и не мога да разбера защо има и двете работи. Дали, за да се угоди на двата лагера? Все пак не ми се мисли какво ще почнат да бълват новите програмисти, които свикнат на библиотеката с парче код и знаят, че стойност от регистрите се чете с избиране на ей онази опция от менюто. Сигурно след 5 години "софтуерна абстракция" ще се дефинира като "това дето го може само архитекта в софтуерната фирма - да оня дето може да създава нови парчета код за библиотечката на средата"
Така... Помрънках си срещу световните неправди. Сега млъквам.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
С доста други средства пак могат да се пишат ГУИ приложения за дни
Аз просто мрънкам, че, едва ли не, се проповядва като best practice нещо, което е безумно тъпо. Гледах рекламираните възможности на "новото" студио дето щяло да излиза скоро. Има рефакторинг поддръжка!!! Хеле доживяхме. Обаче има и поддръжка на библиотека с парчета код ( code snippets ), които да избираш за вкарване в кода. Гледах скрийншот - вб девелопера си избира от меню "Read value from registry". Какво прави ако му трябва да прочете стойността на 5 места в програмата - не искам да мисля. Тази простотия е точно в обратен на идеята на рефакторинга дух и не мога да разбера защо има и двете работи. Дали, за да се угоди на двата лагера? Все пак не ми се мисли какво ще почнат да бълват новите програмисти, които свикнат на библиотеката с парче код и знаят, че стойност от регистрите се чете с избиране на ей онази опция от менюто. Сигурно след 5 години "софтуерна абстракция" ще се дефинира като "това дето го може само архитекта в софтуерната фирма - да оня дето може да създава нови парчета код за библиотечката на средата"
Така... Помрънках си срещу световните неправди. Сега млъквам.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Re: за C#
Ами специално за рефакторинг си прав, че го вкарват в новото Студио (Whidbey) именно заради мрънкане на клиентите. Разбираш ли, някакъв хит е в момента това рефакторинг... рефакторинг това, рефакторинг онова.
Всъщност есенцията на рефакторинга е (полу?)автоматизирано оправяне на кофти написан код. Четох някъде на weblogs.asp.net блога на пича, който отговаря за ВБ.НЕТ в Майкрософт. Неговото мнение е че рефакторинг туулс не трябва да има - ако има такива туулс значи оправдаваме тези, които пишат кофти код и не мислят предварително, тоест лошото писане на код може да стане практика - "Абе я аз ше го наплякам тоя код тука, пък после имало някви рефакторинг неща във Whidbey, те ще ги оправят".
По тази тема имаше доста коментари на пичове от Майкрософт и всички бяха негативно настроени, но все пак рефакторинг в Whidbey ще има, щото клиентите мрънкат. А пак клиента, знаеш, винаги е прав и умен, щом като има пари да плаща.
Всъщност есенцията на рефакторинга е (полу?)автоматизирано оправяне на кофти написан код. Четох някъде на weblogs.asp.net блога на пича, който отговаря за ВБ.НЕТ в Майкрософт. Неговото мнение е че рефакторинг туулс не трябва да има - ако има такива туулс значи оправдаваме тези, които пишат кофти код и не мислят предварително, тоест лошото писане на код може да стане практика - "Абе я аз ше го наплякам тоя код тука, пък после имало някви рефакторинг неща във Whidbey, те ще ги оправят".
По тази тема имаше доста коментари на пичове от Майкрософт и всички бяха негативно настроени, но все пак рефакторинг в Whidbey ще има, щото клиентите мрънкат. А пак клиента, знаеш, винаги е прав и умен, щом като има пари да плаща.
Re: за C#
Не знам доколко е хит рефакторинга... За мен е много важно нещо. На повечето места нямам автоматизирани средства и си го правя на ръка :( Най-добрите инструменти са за Джава, а аз не съм ходил там отдавна.
Не знам доколко поддържаш мнението на оня пич, ама така като го гледам изказал се е без да погледне и да се опита да разбере какво е рефакторинг. Препоръчвам [линк] и едноименната книга на Мартин Фаулър по въпроса.
Рефакторинга не е за оправяне на кофти код. Просто за променяне и подобряване на кода. Това е важното средство, което позволява еволюционното разработване на една програма. И наистина инструментите много помагат. Хич не си е работа да правиш ExtractMethod ръчно в Ц++ например. Е то автоматизирани средства за Ц++ още няма. Има само легенди, че се правят в момента.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Не знам доколко поддържаш мнението на оня пич, ама така като го гледам изказал се е без да погледне и да се опита да разбере какво е рефакторинг. Препоръчвам [линк] и едноименната книга на Мартин Фаулър по въпроса.
Рефакторинга не е за оправяне на кофти код. Просто за променяне и подобряване на кода. Това е важното средство, което позволява еволюционното разработване на една програма. И наистина инструментите много помагат. Хич не си е работа да правиш ExtractMethod ръчно в Ц++ например. Е то автоматизирани средства за Ц++ още няма. Има само легенди, че се правят в момента.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Re: за C#
>>Не знам доколко поддържаш мнението на оня пич, ама така като го гледам >>изказал се е без да погледне и да се опита да разбере какво е рефакторинг
Нормално е да се е изказал без да погледне рефакторинг.ком. Пича е тийм-лийд на ВБ.НЕТ групата в Майкрософт и това го прави достатъчно авторитетен, за да си казва спокойно мнението дори и без подготовка.
Техниките за писане на код и менажиране на проектите са като книгите за диети - мине не мине един месец и веднага се намира разбирач (обикновено уволнен Майкрософт/АйБиЕм служител) с нова теория. Вчера беше екстрийм програминг, днеска е pair programming, утре е рефакторинг, вдругиден? Трябва ли да има подръжка за всички тези неща? Ето ти обичаш рефакторинг и искаш рефакторинг туулс. Пичовете дето правят pair programming какво да поискат, сплит на екрана и едновременна подръжка на две клавиатури? Тези, които обичат да разпускат с игри какво да поискат, вграден Quake в студиото?
Тука си идва момент на трейд-оф. Пича преценя, че рефакторинга не си заслужава, но въпреки това, под натиска на клиентите го прави. Пазарна икономика.
Нормално е да се е изказал без да погледне рефакторинг.ком. Пича е тийм-лийд на ВБ.НЕТ групата в Майкрософт и това го прави достатъчно авторитетен, за да си казва спокойно мнението дори и без подготовка.
Техниките за писане на код и менажиране на проектите са като книгите за диети - мине не мине един месец и веднага се намира разбирач (обикновено уволнен Майкрософт/АйБиЕм служител) с нова теория. Вчера беше екстрийм програминг, днеска е pair programming, утре е рефакторинг, вдругиден? Трябва ли да има подръжка за всички тези неща? Ето ти обичаш рефакторинг и искаш рефакторинг туулс. Пичовете дето правят pair programming какво да поискат, сплит на екрана и едновременна подръжка на две клавиатури? Тези, които обичат да разпускат с игри какво да поискат, вграден Quake в студиото?
Тука си идва момент на трейд-оф. Пича преценя, че рефакторинга не си заслужава, но въпреки това, под натиска на клиентите го прави. Пазарна икономика.
Re: за C#
Бе то, че всичко е маркетинг - това е ясно. Още Дейкстра го е казал, че не трябва да си продаваш душата на една компания
За инструментите в студиото - да не забравяме UML фетишистите. Нека им турим нещо да драпат кръгчета, стрелки и квадратчета, когато ги мързи да пишат код.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
За инструментите в студиото - да не забравяме UML фетишистите. Нека им турим нещо да драпат кръгчета, стрелки и квадратчета, когато ги мързи да пишат код.
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Re: за C#
Еми да, UML е много добър пример. За някои хора (малък на брой) без UML едва ли не не може да се проектира нищо. За повечето хора UML е смешка от човечета без пишки свързани със стрелки дето уж нещо правят там.
Зависи как гледаш на нещата. Явно обаче още UML феновете са доста малко, щото няма специален мод на Студиото за UML. Трябва да си играеш с Визио за целта.
Зависи как гледаш на нещата. Явно обаче още UML феновете са доста малко, щото няма специален мод на Студиото за UML. Трябва да си играеш с Визио за целта.
Re: за C#
Явно обаче още UML феновете са доста малко, щото няма специален мод на Студиото за UML.
За Rational чували ли сме?
За Rational чували ли сме?
Re: за C#
Още така ли им казват? Нали АйБиЕм ги купи?
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Re: за C#
Еми говорех за вградени модове дето се шипват със Студиото, не 3рд парти модове за няколко хиляди долара като Rational Unified Process, които между другото наистина както загатва Муслон от известно време са притежание на АйБиЕм.
Ама тебе си те знаем, че винаги трябва да зададеш някакъв реторичен въпрос към себе си, така че нормално.
Ама тебе си те знаем, че винаги трябва да зададеш някакъв реторичен въпрос към себе си, така че нормално.
Re: за C#
ами май са IBM Rational.
XDE-то гърмеше доста често като го пробвах за последно. Rose-то за С++ пести доста писане обаче - най-малкото да не пишеш по 2 пъти дефинициите на функциите.
XDE-то гърмеше доста често като го пробвах за последно. Rose-то за С++ пести доста писане обаче - най-малкото да не пишеш по 2 пъти дефинициите на функциите.