Пользователей: 1
Гостей: 1085
Всего: 1086

» Подробно
» Сегодня

Привет, гость!









Автор Сообщение
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
08-04-2010 04:41 GMT3 час. #1220647   
Сталкер Монолита Это зависит от твоей соображалки. Для начала установи Visual C# Express Editor 2008. Ссылку найдёшь на первой странице. Почитай MSDN. Ссылку найдёшь там же. Попрактикуйся немного. А там уже сам решай, стоит его изучать, или нет. Если всётаки решишь продолжить его изучение, то конечно помогать будем по мере собственных знаний.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
08-04-2010 12:22 GMT3 час. #1220791   
singapur22
Ты вроде с коллекцией List разобрался - поясни мне пожалуйста что

отредактировал(а) erlik: 08-04-2010 14:21 GMT3 час.

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
08-04-2010 16:37 GMT3 час. #1220986   
erlik {get; set;} --это достаточно удобное контекстное выражение. Используется для задания свойств переменным. Например, **50016ea8aab1bb10eeba** {
return int1;
}
set
{
int1 = value *5;
}
}
}[/code]

Назначенные свойства таковы. При считывании значения переменной int2 будем всегда получать значение равное установленному значению помноженному на 5.
Тоесть, если назначить переменной int2 значение равное 3, то при последующем считывании его значения получим 15.
Подобные контекстные выражения удобно использовать для создания и дальнейшего использования скрытых математических формул, используемых в точечных местах кода.

Или ещё один способ применения. Можно использовать данное свойство, как математическое действие, с запретом возможности изменения значения через переменную свойсва:

[code]public int1 = 5;

public int2
{
get
{
return int1 * int1;
}
}[/code]


В данном примере мы не использовали свойство set; Это приводит к тому, что назначить значение переменной int2 не возможно. Фактически, переменную int2 мы здесь используем как формулу математического действия над переменной int1.

И наконец третий пример. Используем только свойство set;

[code]public int1;

public int2
{
set
{
int1 = value * value;
}
}[/code]

В данном примере переменная int2 используется как метод установки значения переменной int1. Считать соответственно значение с переменной int2 нельзя. Так как используется она как предварительное математическое действие над значением, перед установкой его переменной int1.
К сведенью. value -- это зарезервированное слово возвращающее значение переменной свойства, в теле которого оно используется.

отредактировал(а) singapur22: 08-04-2010 17:03 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
08-04-2010 17:03 GMT3 час. #1221023   
singapur22
Спасибо - теперь все стало понятно, а то раньше гадал - для чего эти выражения нужны - пояснений нигде не встречал.


Ещё какието (LINQ to ...) видел

нарыл вот такие интерфейсы использующие linq запросы:
LINQ to Object - работает с коллекциями IEnumerable или IEnumerable - методы в пространстве имен System.Linq
LINQ to XML пространство имен System.Xml
LINQ to ADO.NET - включает LINQ to SQL и LINQ to DataSet
LINQ to SQL - используются те же методы System.Linq только в отношении баз данных SQL
LINQ to DataSet - запросы к данным, кэшированным в объекте DataSet.

вчера безуспешно пытался провернуть операцию сортировки данных по алфавиту в массиве через запросы linq - ничего так и не вышло. Пробовал через group by
зато получилось через Array.Sort()
всего одна строчка и массив отсортирован
Array.Sort(students,(p1, p2) => p1.CompareTo(p2));

Разобрался почти со всеми методами Linq to Object кроме предложений join и group
Ты как с запросами linq уже работал? Если есть примерчики - выкладывай :-)


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
08-04-2010 17:20 GMT3 час. #1221041   
erlik С Linq не работал, поэтому ничего нового сообщить не могу.

А на счёт сортировки, имеется ещё тройка классов использующих данное свойсво. Такие как:

SortedList // Предоставляет коллекцию пар "ключ-значение", упорядоченных по ключам. Доступ к парам можно получить по ключу и по индексу.

SortedList //Представляет коллекцию пар "ключ-значение", упорядоченных по ключу на основе связанной реализации System.Collections.Generic.IComparer.

SortedDictionary //Представляет коллекцию пар "ключ-значение", отсортированную по ключу.

Имеются также базовые классы и интерфейсы, для реализации расширенных классов на основе данных свойств.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
08-04-2010 17:47 GMT3 час. #1221071   
singapur22
Неуниверсальный вариант SortedList я как то тестил.
упорядочивает всю коллекцию в момент заполнения - причем можно хоть цифры делать ключами - тогда по числовому возрастанию сортирует, хоть буквы - тогда по порядку букв в алфавите.а если слова разные использовать тогда фиг знает как отсортирует.

SortedList SL = new SortedList();
//добавляем в коллекцию значения и ключи
SL.Add("a","отговорила");
SL.Add("c","роща");
SL.Add("b","золотая");
SL.Add("e","березовым");
SL.Add("f","зеленым");
SL.Add("g","языком");

вот здесь второе и третье слова местами поменяются. Я еще сначала не понимал почему у меня значения местами меняются :-)

foreach (DictionaryEntry kvp in SL)
{
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}
Console.ReadKey();



но мне было интересно именно через linq сделать.


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
08-04-2010 18:25 GMT3 час. #1221118   
erlik Это конечно всё хорошо, но у меня другая тема. Пытаюсь решить одну проблему. Пока без успешно. Кароче мне нужно, чтобы при инициализации дочернего класса, иници**50046ea8aab1bb10eeba**BaseClass()
{
//заносим объект в таблицу
}
}

class DocherClass : BaseClass
{
public DocherClass()
{
//заносим объект в таблицу
}
}[/code]


При создании объекта того, или иного класса, он (объект) регистрируется в определённой таблице.
Оба класса могут использоваться по отдельности. Тоесть могут создаваться объекты как BaseClass класса, так и DocherClass класса по отдельности.
Проблема заключается в том, что при создании объекта дочернего класса, в таблице производится регистрация двух объектов (объекта класса BaseClass и объекта класса DocherClass). Мне же нужно, чтобы при создании объекта DocherClass класса, базовый объект не регистрировался. Испробывал всё, но в связи с тем, что при создании объекта дочернего класса, сначала производится инициализация базового класса, а уже после, дочернего. Из-за чего нет возможности задавать условия регистрации из дочернего класса.
Но может можно както определить в базовом классе, что создаётся именно объект дочернего класса, а не базового?

добавлено спустя 50 минут

//////////////////////////////////////////////////////////////

Ффуууу! Наконецто решил свою проблему. Правда не так как хотелось бы, но и это тоже результат.
Фактически пришлось пожанглировать уровнями доступности. В итоге получили такое решение:

[code]class BaseClass
{
protected BaseClass() {}

public BaseClass(string name)
{
//заносим объект в таблицу
}
}

class DocherClass : BaseClass
{
public DocherClass(string name)
{
//заносим объект в таблицу
}
}[/code]


Как видно из кода, пришлось добавить обязательный аргумент, который разделяет два конструктора с модификаторами protected и public.
К сведенью: Модификатор protected ограничивает доступ к методу или в данном случае, к конструктору, содержащим классом или типами, которые являются производными от содержащего класса. Тоесть, при создании объекта класса DocherClass будет производиться инициализация класса BaseClass через конструктор protected BaseClass(), в то время если создавать объект класса BaseClass, его инициализация будет производиться только через конструктор public BaseClass(string name).

Вот если бы ещё был модификатор с уровнем доступности, только из внешних классов и сборок, то вообще бы всё было в ажуре. Можно было бы отказаться от обязательного аргумента.

отредактировал(а) singapur22: 08-04-2010 19:17 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Cos
    
Посты: 2690
Откуда:
Возраст:
08-04-2010 19:39 GMT3 час. #1221185   
singapur22
Я конечно не знаю всех тонкостей в наследовании С++/C#, но как насчет создания нескольких конструкторов для дочернего класса? В конструкторе по-умолчанию (public DocherClass()) будет производится только инициализация, без регистрации, а в доп. конструкторе (с какими-нибудь левыми параметрами для его дифференциации от констр. по-умолчанию) будет и инициализ. и регистрация.

добавлено спустя 3 минут


Ффуууу! Наконецто решил свою проблему.

...Ну или вместо параметров дифференцировать конструкторы по их уровню доступности.

отредактировал(а) Cos: 08-04-2010 19:42 GMT3 час.

erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
08-04-2010 19:52 GMT3 час. #1221203   
singapur22
ну видишь сам решил - я насчет protected хотел тебе написать да подумал может тебе не этот эффект который он дает вовсе нужен.


Вот если бы ещё был модификатор с уровнем доступности, только из внешних классов и сборок

тебе нужен обратный по значению internal'у ?


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
08-04-2010 20:02 GMT3 час. #1221217   
erlik Internal не канает, так как является модификатором с совершенно другим типом доступности. Он ограничивает доступ в пределах сборки.

Cos

дифференцировать конструкторы
Это как?


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
08-04-2010 20:05 GMT3 час. #1221221   
singapur22
так я и говорю - обратный по значению - но поковыряв книжку такого не нашел.

А я тоже свою проблемку (мелкую конечно) решил
оказывается в linq есть отличный метод который сортирует не только числа, но и строки

string[] students = { "Яковлев","Иванов", "Сидоров","Петров",
"Орлов", "Курочкин", "Шишкин" };

var list3 = students.OrderBy(z => z);
получаем список отсортированный по алфавиту - даже компаратор не нужен так как используется дефолтовый (хотя можно и свой указать).

отредактировал(а) erlik: 08-04-2010 20:15 GMT3 час.

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
08-04-2010 20:06 GMT3 час. #1221222   
erlik

но поковыряв книжку такого не нашел.
Вот в том то и проблема.


А я тоже свою проблемку (мелкую конечно)


Молодец! Нам это тоже пригодится:-)

отредактировал(а) singapur22: 08-04-2010 20:53 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Cos
    
Посты: 2690
Откуда:
Возраст:
08-04-2010 20:38 GMT3 час. #1221274   
singapur22
То что и было сделано **50016ea8aab1bb10eeba**заносим объект в таблицу
}
}
[/code]


Т.е создавая второй конструктор с неким различием в параметрах от констр. по-умолчанию (в данньм случае с доп. параметром name) и позднее созданием объекта public DocherClass("lalala") компилятор при инициализ. конструктора базового класса будет искать "наиболее похожий" (мое предположение относительно C#, в C++ это делается ручками, т.е можно банально указать какой из конструкторов базового класса мы хотим вызвать) т.е. опять таки с одним параметром типа srting. И соотв. таким образом варьировать способы инициализ. конкретного класса.


singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
08-04-2010 20:59 GMT3 час. #1221295   
Cos

в C++ это делается ручками, т.е можно банально указать какой из конструкторов базового класса мы хотим вызвать


А как э

отредактировал(а) singapur22: 08-04-2010 21:53 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
08-04-2010 22:27 GMT3 час. #1221359   
singapur22
пригодится. я этот base пока вообще не применял - хотя и читал что он для вызова любого конструктора из базового класса применяется.

Вот тоже наката


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Cos
    
Посты: 2690
Откуда:
Возраст:
08-04-2010 22:48 GMT3 час. #1221371   
singapur22

А как это делается? Так же различия по аргументам, или можно со**50026ea8aab1bb10eeba** {}
public DocherClass(string name) : base(name)
{}
[/code]


Похоже. Те же яйца, только в профиль, вместо ключ. слова base просто указывается имя базового класса.


Получился такой демонстрационный код, поддерживающий наследование и занос в таблицу данных об объекте при конструировании

Инкапсуляция с простым наследованием раскрыты. Остался полиморфизм :-).


singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
09-04-2010 09:15 GMT3 час. #1221446   
Cos Если ты имеешь ввиду это:

Полиморфизм реализуется с помощью наследования классов и виртуальных функций.
То данные решения уже достигнуты. Имеется соответствующая пар**50016ea8aab1bb10eeba** ...
public virtual void Metod()
{
...
}
}

class DocherClass : BaseClass
{
...
public override void Metod()
{
...
base.Metod();
}
}[/code]


Где вызов базового виртуального метода base.Metod(); не обязателен. Хотя если переопределение используется для разделённых потоков, например Update() и Drow(), то без вызова базовых методов, пожалуй не обойтись. Это если метод не возвращает значение. А вот так будет выглядеть код с виртуальным методом возвращающим значение определённого типа:

[code]class BaseClass
{
...
public virtual double Metod()
{
...
return ...;
}
}

class DocherClass : BaseClass
{
...
public override double Metod()
{
...
return ...;
}
}[/code]



erlik Прикольно. Проконспектирем.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
09-04-2010 14:08 GMT3 час. #1221602   
singapur22
проверь у себя вот **50016ea8aab1bb10eeba** == '?').Count();
Console.WriteLine(cn);[/code]

у меня с форматом doc и rtf выдает неправильные значения. С txt и ltx все верно.
скорей всего word глючит - но надо удостовериться.

добавлено спустя 8 часа 56 минут

Вот накатал несколько примеров работы с linq запросами.
Может заинтересует - тоже начнешь LINQ изучать :-) хорошая вещь - полезная. А для группировки и сортировки данных из таблиц\массивов баз - вообще незаменимая.

[code]
//находим элементы двух множеств которые не совпадают
double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
double[] numbers2 = { 2.2 };

IEnumerable onlyInFirstSet = numbers1.Except(numbers2);
foreach (double number in onlyInFirstSet)
{
Console.WriteLine(number);
}

//находим пересечения(повторяющиеся элементы) двух множеств
int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };

IEnumerable both = id1.Intersect(id2);

foreach (int id in both)
{
Console.WriteLine(id);
}

//получаем число элементов в последовательности
string[] fruits = { "apple", "banana", "mango",
"orange", "passionfruit", "grape" };

long count = fruits.LongCount();
Console.WriteLine("В коллекции {0} фруктов.", count);



int[] grades = { 59, 82, 70, 56, 92, 98, 85 };
//отсортируем значения в порядке убывания, пропустим три первых и выберем остальные
IEnumerable skip = grades.OrderByDescending(g => g).Skip(3);
//отсортируем значения в порядке убывания и выберем три первых
IEnumerable take =grades.OrderByDescending(g => g).Take(3);

foreach (int grade in take)
{
Console.WriteLine(grade);
}


//объединим два множества отбросив повторяющиеся значения
int[] ints1 = { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] ints2 = { 5, 6, 7, 8, 9, 10, 11, 12 };

IEnumerable union = ints1.Union(ints2);

//объединяет два множества целиком
IEnumerable concat = ints1.Concat(ints2);

foreach (int num in union)
{
Console.Write("{0} ", num);
}

//реверс элементов последовательности
char[] apple = { 'a', 'p', 'p', 'l', 'e' };

char[] reversed = apple.Reverse().ToArray();

foreach (char chr in reversed)
{
Console.Write(chr + " ");
}


int[] m = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// возвращает только элементы удовлетворяющие условию -
IEnumerable mass2 = m.TakeWhile(z => z < 8);
foreach (var x in mass2)
{
Console.WriteLine(x);// возврат 1, 2, 3, 4, 5, 6, 7
}

int[] m2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// пропускает все элементы удовлетворяющие условие и возвращает остальные
IEnumerable mass = m2.SkipWhile(z => z < 8);
foreach (var x in mass)
{
Console.WriteLine(x);//возрват 8,9,10
}

// генерирует последовательность чисел в указанном диапазоне
var sq = Enumerable.Range(1, 100);


int[] nums2 = { 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 };

// возвращает первый элемент последовательности
int num1 = nums.First();
int num2 = nums.First(x => x > 50); // с условием
int num3 = nums.FirstOrDefault(x => x > 5000); // с возвратом значения по умолчанию если нужный элемент не найден.

// вычисляем среднее значение последовательности чисел
double среднее = nums.Average();

// вычисляем сумму последовательности значений типа Int32. Тип последовательности - любой числовой
List numbers = new List { 1, 6, 583, 100 };
float sum = numbers.Sum();


// проверка всех элементов последовательности - например на четность
bool n = nums.All(c => c % 2 == 0);


// проверяет две последовательности на равенство
bool equal = nums.SequenceEqual(nums2);


string[] city = { "New York", "Londona", "Paris",
"Roma", "Moscow", "Barselona" };

// проверка на наличие элемента
bool res = city.Any(c => c.Equals("London"));
bool res2 = city.Contains("London");
Console.WriteLine(res2.ToString());

ArrayList fruits2 = new ArrayList(4);
fruits2.Add("Mango");
fruits2.Add("Orange");
fruits2.Add("Apple");
fruits2.Add(3.0);
fruits2.Add("Banana");

// фильтруем коллекцию задав нужный тип для отсева
var query1 = fruits2.OfType();

foreach (var x in query1)
{
Console.WriteLine("Значение {0} Тип {1}", x, x.GetType());
}

[/code]



А это немного посложнее - примеры целенаправленной сортировки и группировки.


[code]
public class ListAuto
{
public string label;
public string country;
public int cost;
public string color;

}

public List GetAuto()
{
List autolist = new List

{
new ListAuto {label= "FIAT", country="Италия", cost=14000, color="Синий"},
new ListAuto {label= "ROLLS ROYS", country="Великобритания", cost = 200000, color="Синий"},
new ListAuto {label= "AUDI", country="Германия", cost = 18000, color="Красный"},
new ListAuto {label= "SKODA",country="Чехия", cost = 15000, color="Черный"},
new ListAuto {label= "TOYOTA", country="Япония", cost =20000, color="Синий"},
new ListAuto {label= "BENTLY", country="Великобритания", cost = 150000,color="Синий" },
new ListAuto {label= "MAZDA", country="Япония", cost =21000, color="Желтый"},
new ListAuto {label= "KIA", country="Корея", cost=22000 , color="Желтый"},
new ListAuto {label= "FORD", country="США", cost =19000, color="Белый"},
new ListAuto {label= "Volga", country="Россия", cost= 18000,color="Металлик" },
new ListAuto {label= "DAEWOO", country="Корея", cost= 16000, color="Черный"},
new ListAuto {label= "MITSUBISHI", country="Япония", cost =22000},
new ListAuto {label= "CRYSLER", country="США", cost =260000,color="Красный" },
new ListAuto {label= "Volkswagen", country="Германия", cost= 16000, color="Белый"},
new ListAuto {label= "LADA", country="Россия", cost= 15000, color="Синий"},
new ListAuto {label= "Mercedes Benz", country="Германия", cost= 30000,color="Черный" }
};
return autolist;
}


public void Auto()
{
List autolist = GetAuto();

// формируем запрос к базе- хочу тачку не дороже 25 штук, не из России и не желтого цвета
var myauto = from auto in autolist
where (auto.country != "Россия" & auto.cost <= 25000 & auto.color!="Желтый")
orderby auto.cost // сортируем по цене для удобства
select auto.label;// выбираем то что нужно

// или так
var myauto2 = autolist.Where(
x => x.country != "Россия" & x.cost <= 25000 & x.color!="Желтый").OrderBy(d => d.cost).Select(s => s.label);

// получаем выборку
foreach (var auto in myauto2)
{
Console.WriteLine(auto);
}


// сгруппируем тачки в группы по странам и заодно сделаем сортировку по цене внутри каждой группы
var groupauto = autolist.OrderBy(t => t.cost).GroupBy(g => g.country);

// или так - что равнозначно
var groupauto2 =
from тачка in autolist
orderby тачка.cost
group тачка by тачка.country;


// получаем сформированный группы через двойной цикл
foreach (var группа in groupauto2)
{
Console.WriteLine("Страна: {0}",группа.Key);
foreach (var тачка in группа)
{
Console.WriteLine("Тачка: {0} Цена {1}", тачка.label, тачка.cost);
}
}


// усложняем задачу - выберем самую дешевую тачку в каждой стране
var groupauto3 =
from тачка in autolist
orderby тачка.cost //сначала сортируем по цене в порядке возрастания
group тачка by тачка.country into группатачек //группируем по странам - результат сохраняем в into
select группатачек.First(); //и наконец берем только первую тачку в каждой последовательности - она и будет самой дешевой


foreach (var тачка in groupauto3)
{
Console.WriteLine("Страна: {0} Марка: {1} Цена {2}",тачка.country, тачка.label, тачка.cost);

}

Console.ReadKey();

}
[/code]

отредактировал(а) erlik: 09-04-2010 23:34 GMT3 час.

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
    
Посты: 1806
Откуда: Челябинск
Возраст: 28
10-04-2010 17:26 GMT3 час. #1222661   
У меня вопрос.
Можно ли сделать так, чтобы при запуске программы появлялась консоль (сделано) и после закрытия её (любая клавиша) появлялась другая программа.
Т.е. мы сделали допустим окно, жмём F5, появляется консоль с приветствием. Жмём любйю кнопку для выхода. Появляется "окно".
Как это можно организовать?


И все мы ждем чего-то. Работа - дом - работа ©
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
10-04-2010 18:22 GMT3 час. #1222688   
Сталкер Монолита
а зачем тебе это?
вообще то окна (то есть программы с созданным тобой интерфейсом) появляются если используешь не консольный проект, а проект WPF.
Хотя запуск любой сторонней (не твоей) программы можно сделать через код в любом проекте - есть специальные методы запуска и остановки программных потоков.
но что ты именно хочешь мне не совсем понятно.
из консоли то считать введенную клавишу (или слово )можно - и потом поймав ее вызвать команду для запуска программы

вот пример:
когда консоль открылась - выполняя какую то твою задачу - то после выполнения вводим слово run и жмем Enter - происходит запуск прораммы Norepad++

вот этот код должен быть у тебя в функции - слово для запуска пишешь любое.

if (Console.ReadLine() == "run")
{
Process p = new Process();
p.StartInfo.FileName = "notepad++.exe"; // имя программы - то что хочешь запустить
p.Start();
}

вверху файла нужно указать директиву
using System.Threading; (и подключить эту сборку если она не подключена через меню проект-> добавить ссылку)


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
    
Посты: 1806
Откуда: Челябинск
Возраст: 28
10-04-2010 18:31 GMT3 час. #1222694   
erlik
Спасибо. Я просто хотел сделать что-то типа приветствия.

Тогда второй вопрос:
Как собственный проект скомпилить в -exe файл?


И все мы ждем чего-то. Работа - дом - работа ©
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
10-04-2010 18:35 GMT3 час. #1222696   
Сталкер Монолита
прочитай всю ветку темы - там singapur22 все подробно расписывал - конкретно на 4-ой странице.


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
    
Посты: 1806
Откуда: Челябинск
Возраст: 28
10-04-2010 18:53 GMT3 час. #1222703   
erlik
Попробывал твой пример, ругается на отсутствие имени Process.
Не знаешь в чём дело?


И все мы ждем чего-то. Работа - дом - работа ©
Cos
    
Посты: 2690
Откуда:
Возраст:
10-04-2010 18:58 GMT3 час. #1222713   
Сталкер Монолита
В таких случая выкладывается исходник компилируемого файла (благо он небольшой).
Скорее всего забыто:

erlik

вверху файла нужно указать директиву
using System.Threading; (и подключить эту сборку если она не подключена через меню проект-> добавить ссылку)


Либо System.Diagnostics если верить msdn:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx


Psychologist
    
Посты: 1806
Откуда: Челябинск
Возраст: 28
10-04-2010 19:19 GMT3 час. #1222736   
Cos
То что ты привёл в цитате, указано.
Я и не хотел скомпилить проект (пока), просто он Процесс подчёркивает и говорит:

Нет имени типа или ...


Действительно, после добовления System.Diagnostics заработало.
Спасибо!

добавлено спустя 9 минут

Вопрос:
Что означает последнее число в свойстве Margin?

И ещё:
Как задать тексту цвет и размер? Какое свойство за это отвечает?


И все мы ждем чего-то. Работа - дом - работа ©
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
10-04-2010 19:29 GMT3 час. #1222743   
Cos
ты прав - ошибся блин - у меня в этом файле с тестовыми функциями целая куча директив.:-)
Сталкер Монолита
там все эти цифры - отступы от верха,низа, справа, слева - ты сам разные значения повводи - быстрее сам разберешься :-)
я уж точно не помню - тем более использую не Margin, а Canvas.Top="значение" Canvas.Left="значение" и т.д. то есть отступы от компонента Canvas -это такая ограничивающая рамка.

добавлено спустя 2 минут

цвет
Foreground ="выбираешь цвет в- в панельке - она сама откроется"
FontFamily="Century Gothic" -- шрифт
FontSize="12" размер шрифта

отредактировал(а) erlik: 10-04-2010 19:31 GMT3 час.

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
    
Посты: 1806
Откуда: Челябинск
Возраст: 28
10-04-2010 19:39 GMT3 час. #1222750   
erlik
Насчёт маргина, я уже понял что отступы, только с последним, пробывал и 1 и 100 разницы не было, значит сизу.

И спасибо что сообщил про цвет текста, пригодится.

отредактировал(а) Сталкер Монолита: 10-04-2010 19:44 GMT3 час.

И все мы ждем чего-то. Работа - дом - работа ©
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
10-04-2010 19:55 GMT3 час. #1222763   
Сталкер Монолита
в общем я посмотрел у себя - в принципе две вторые цифры в margin особенно не нужны
первая дает отступ слева , вторая от верха - у меня почти везде третья и четвертая цифры по нолям выставлены


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Psychologist
    
Посты: 1806
Откуда: Челябинск
Возраст: 28
11-04-2010 08:24 GMT3 час. #1223053   
У меня вопрос, касательно установки.

Сейчас я у дяди, у него Виста стоит, поэтому установилась нормально.
Но когда я дома на ХР ставлю, вылетает, когда начинает устанавливаться "Установщик Windows 3.1 (3.6)". Всё из инета скачалось, началась установка и сразу ошибка.
Не знаете в чём дело?

добавлено спустя 12 минут

erlik
Попробывал в конструкторе поводить объект, оказалось, что отступ снизу или сверху указывается лишь тогда, когда до низа или верха расстоояние меньше середины. Т.е. если объект в самом низу то отступ до верха не указывется.

отредактировал(а) Сталкер Монолита: 11-04-2010 08:36 GMT3 час.

И все мы ждем чего-то. Работа - дом - работа ©
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
11-04-2010 11:34 GMT3 час. #1223176   
Сталкер Монолита
У меня как раз XP - и установилась программа с первого раза и без глюков. (Я правда качал полный пак сред разработки - сразу и для С++, и VB и C# и т.д. - весил пак 800 метров.)
Поэтому сложно сказать почему у тебя так. Там хоть что в ошибке то пишется?


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"


Форумы Специализированные » Hard & Soft Программирование на C# (C Sharp)


Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для
просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.

Использование материалов сайта возможно с разрешения администрации. Все права защищены. © 2004–2024 «Stalker-Portal.ru»