Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать Dock не к краю, а к краю минус 100 
:(
    Опции темы
slavaentp
Дата 29.1.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



пикселей?
PM MAIL   Вверх
Partizan
Дата 29.1.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



slavaentp, попробуйте поиграться со свойством Margin


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
slavaentp
Дата 29.1.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



Мне даже интереснее не то, как решить этот конкретный вопрос, а как искать решение на такие вопросы.

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

Я знал, что, "прикрепление" к окну идёт с помощью Dock. Соответственно, был уверен, что и возможность "отклонения" от края для прикрепления находится тоже в области Dock. Не нашёл. Искал долго.

Дальше я решил попробовать поставить кнопку на чёткое расстояние, сделав Dock на какой-нибудь "пустой" элемент формы, просто чтобы ричтекстбокс распространялся не до конца края формы, а оставил место для кнопки. Вначале думал это сделать с помощью label, но потом выяснил, что label закрывает кнопку.
ОК. Вышел на такую штуку как UserControl. Добавил его в форму, сделал ему DockStyle.Bottom Теперь richtextbox раздвигается как надо, и я уже с помощью нескольких UserControl'ов почти поставил кнопку на нужное мне место.

После чего пришёл ответ Partizan на мой вопрос, и выяснилось, что решение вопроса лежит абсолютно непонятно почему в каком-то свойстве Margin, которое, не зная заранее, обнаружить просто нереально! Ибо в описании MSDN оно описывается так: "Gets or sets the space between controls. (Inherited from Control). ".
По такому описанию ну никак не понять, что это свойство может держать расстояние при изменении окнаsmile

Поэтому мне интересно, как искать решения на такие простые в общем-то вещи, но которые оказываются "спрятаны" в самых неожиданных местах.

Я понимаю, что если бы я знал концепцию Control'ов, то может быть бы описание это со скрипом понял, но в тех книгах, что я читал, контролы не объяснялись, а на практике мне впервые они понадобились.

Да и вообще - в программировании много чего не знаешь, и как-то неприкольно, что каждый мелкий вопрос занимает столько времени и требует вопроса на форуме:(
PM MAIL   Вверх
QryStaL
Дата 29.1.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 10
Всего: 32



Цитата(slavaentp @  29.1.2009,  17:12 Найти цитируемый пост)
Как сделать Dock не к краю, а к краю минус 100 пикселей?


Свойство Anchor



--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Partizan
Дата 29.1.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



slavaentp, с опытом всё приходит. Начало всегда получается медленно и со скрипом...зато потом становится существенно легче...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
slavaentp
Дата 29.1.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



QryStaL, Anchor не делает ресайза.
PM MAIL   Вверх
PashaPash
Дата 29.1.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



slavaentp, делает. Он приякоревает нужный тебе край контрола к краю родителя. 


--------------------
PM MAIL WWW   Вверх
slavaentp
Дата 29.1.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



Код

using System;
using System.Windows.Forms;

class Form1 : Form{

public Form1(){

RichTextBox richtextbox1 = new RichTextBox();

richtextbox1.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom);

Controls.Add(richtextbox1);

}

}

class Program{

public static void Main(){

Application.Run(new Form1());

}

}


Не приякоривает.

Добавлено через 7 минут и 47 секунд
В этом случае он приякоривает, но размер не меняет. Мне-то нужно, чтобы текстбокс был на всю форму за исключением нижнего края, размером в 100 пикселей.

Код

richtextbox1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right);

PM MAIL   Вверх
PashaPash
Дата 29.1.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



slavaentp, так приякорь его сразу к 4 краям. Его почти порвет на части, и начент ресайзить.
Хотя в таком случае лучше Dock.Fill + Margin 100.


--------------------
PM MAIL WWW   Вверх
slavaentp
Дата 29.1.2009, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



Про Magrin - в MSDN есть примеры использования его в XML, но нету - в C#
PM MAIL   Вверх
QryStaL
Дата 29.1.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 10
Всего: 32



Цитата(slavaentp @  29.1.2009,  20:58 Найти цитируемый пост)
Мне-то нужно, чтобы текстбокс был на всю форму за исключением нижнего края, размером в 100 пикселей.

Растягиваешь richTextBox на форму, а потом ставишь Anchor на все 4 стороны

Добавлено через 3 минуты и 33 секунды
А вообще для такой задачи лучше взять SplitContainer =)


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
slavaentp
Дата 29.1.2009, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



Да, растяжка Anchor'ом на 4 стороны работает. Но если лучше DockStyle.Fill + Margin, то как это сделать? Вот это:

Код

            richTextBox1.Margin = new Padding(100);
            richTextBox1.Dock = DockStyle.Fill;            

растягивает текстбокс на всю форму.
PM MAIL   Вверх
slavaentp
Дата 29.1.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.6.2008

Репутация: нет
Всего: -1



Свойство Margin, которое в Visual C# Express Edition(до этого я в блокноте писал) при наличии DockStyle.Fill вообще ничего не меняет, какие значения Margin'у не ставь.
PM MAIL   Вверх
emmanuil
Дата 31.1.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



У контейнеров есть свойство Padding, оно служит для того, чтобы задать на какую величину заполняющий контрол будет удален от границы контейнера. Можно задать значение для любой из сторон или же для всех. Действует только если внутренний контрол имеет какой-нибудь док - fill, left и т.д. Теперь на счет Margin - служит для дезайнера, задает расстояние между элементами, при котором появляется полоска дока (или как там эта полоска называется smile).

PM MAIL   Вверх
emmanuil
Дата 31.1.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



Кстати, как раз для твоего случая. Есть контейнер TableLayoutPanel. Сделай в нем две строки. Для этого щелкни правой кнопкой мыши по TableLayoutPanel и из контекстного меню выбери Edit Rows and Columns. Далее, в верхнюю строку текстбокс а в нижнюю кнопку. Сделай для нижней строки Size Type = Absolute и задай скажем 30 пикселей. Сделай для TableLayoutPanel Dock = Fill и все как ты и хотел. Или сделай способом, которым ты пробовал - через панел или юзер конторол, в общем через еще один контейнер.

У дезайнера в студии есть один недостаток. Когда я использую якорьки для контролов на форме, а затем наследую классы от этой формы, то при открытии наследника в дезайнере положение контролов съезжает, иногда уходят за пределы формы. Но в рантайме все нормально выглядит, что хоть как-то, но сглаживает этот недостаток. smile

Удачи!

Добавлено через 5 минут и 20 секунд
ЗЫ: вот как раз свойство Margin можно использовать для текстбокса при помещении его в контайнер хранения состояния, тобиш в TableLayoutPanel, FlowLayoutPanel и т.д.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0976 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.