создать пользовательскую кнопку в Java-коде, а в Xml, как показано ниже
Button bs_text[]= new Button[some_value];
for(int z=0;z<some_value;z++)
{
try
{
bs_text[z] = (Button) new Button(this);
}
catch(ArrayIndexOutOfBoundsException e)
{
Log.d("ArrayIndexOutOfBoundsException",e.toString());
}
}
Явный бросок для удвоения как это не необходим:
double trans = (double) trackBar1.Value / 5000.0;
Идентификация константы как 5000.0
(или как 5000d
) достаточна:
double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
Необходимо использовать 5000.0
вместо 5000
.
По-моему, желательно быть максимально явным. Это добавляет ясность к коду и помогает Вашим коллегам - программистам, которые могут в конечном счете считать его.
В дополнение к (или вместо) добавление .0
к числу, можно использовать decimal.ToDouble()
.
Вот некоторые примеры:
// Example 1
double transperancy = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transperancy);
// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
Почему Вы делитесь на 5 000? Просто установите Минимальные и Максимальные значения TrackBar между 0 и 100 и затем разделите Значение на 100 для процента Непрозрачности. Минимальные 20 примеров ниже препятствуют тому, чтобы форма стала абсолютно невидимой:
private void Form1_Load(object sender, System.EventArgs e)
{
TrackBar1.Minimum = 20;
TrackBar1.Maximum = 100;
TrackBar1.LargeChange = 10;
TrackBar1.SmallChange = 1;
TrackBar1.TickFrequency = 5;
}
private void TrackBar1_Scroll(object sender, System.EventArgs e)
{
this.Opacity = TrackBar1.Value / 100;
}
Ваш код хорошо работал в VB.NET, потому что он неявно делает любые броски, в то время как C# имеет и неявные и явные.
В C# преобразование из десятичного числа для удвоения является явным, поскольку Вы теряете точность. Например, 1.1 не может быть точно выражен как двойное, но может как десятичное число (см." Числа с плавающей точкой - более неточный, чем Вы думаете " по причине почему).
В VB преобразование было добавлено для Вас компилятором:
decimal trans = trackBar1.Value / 5000m;
this.Opacity = (double) trans;
то, Что (double)
должен быть явно указан в C#, но может быть , подразумевало более 'прощающим' компилятором VB.
Более универсальный ответ для универсального вопроса "Десятичное число по сравнению с Дважды?": Десятичное число для денежных вычислений для сохранения точности, Двойной для научных вычислений, которые не становятся затронутыми небольшими различиями. С тех пор Дважды тип, который является собственным к ЦП (внутреннее представление хранится в основа 2 ), вычисления, сделанные с Двойным, выполняют лучше тогда Десятичное число (который представлен в основа 10 внутренне).
Это походит this.Opacity
, двойное значение, и компилятору не нравитесь Вы пытающийся переполнить десятичное значение в него.
У Вас есть две проблемы. Во-первых, Opacity
требует двойного, не десятичного значения. Компилятор говорит Вам что, в то время как существует преобразование между десятичным числом и дважды, это - явное преобразование, которое необходимо определить для него для работы. Второе - то, что TrackBar.Value
целочисленное значение, и деление интервала интервалом приводит к интервалу, какому типу переменной Вы присваиваете его. В этом случае существует неявный бросок от интервала до десятичного числа или дважды - потому что нет никакой потери точности, когда Вы делаете бросок - таким образом, компилятор не жалуется, но значение, которое Вы получаете, всегда 0, по-видимому, так как trackBar.Value
всегда меньше чем 5 000. Решение состоит в том, чтобы изменить Ваш код, чтобы использовать дважды (собственный тип для Непрозрачности) и сделать арифметику с плавающей точкой путем явного создания константы двойным - который будет иметь эффект продвижения арифметики - или кастинг trackBar.Value
для удвоения, который сделает то же самое - или оба. О, и Вам не нужна промежуточная переменная, если она не использовала в другом месте. Мое предположение является компилятором, оптимизировал бы его далеко, так или иначе.
trackBar.Opacity = (double)trackBar.Value / 5000.0;