interface ILoginForm
{
void WebDocumentLoaded(System.Windows.Forms.WebBrowser webBrowser, Uri url);
}
if (typeof(ILoginForm).IsAssignableFrom(this.GetType()))
{
this.CanLogin = false;
Debug.WriteLine("ILoginForm", "LoginForm");
((ILoginForm)this).WebDocumentLoaded(this.webBrowser1, e.Url);
}
export interface ILocalization {
Loading: string;
LoadingFileContents: string;
// ...
}
export class RU implements ILocalization {
public Loading: string = 'Загрузка...';
public LoadingFileContents: string = 'Получение содержимого файла...';
// ...
}
interface IDBClient
{
public function ExecuteNonQuery();
public function ExecuteScalar();
public function GetRow();
// ...
}
// реализация метода ToInt32
public int ToInt32(IFormatProvider provider)
{
// если пусто, возвращаем ноль
if (!this.HasValue) { return 0; }
// если что-то есть, извлекаем числа и пробуем вернуть int32
return Convert.ToInt32(OAuthUtility.GetNumber(this.Data));
}
public bool SupportRevokeToken { get; protected set; }
public bool SupportRefreshToken { get; protected set; }
public GoogleClient(string clientId, string clientSecret) : base(/*...*/)
{
// ...
base.SupportRevokeToken = true;
base.SupportRefreshToken = true;
}
export interface ILoginState {
Username?: string;
Password?: string;
// ...
}
export default class Index extends Page<any, ILoginState> {
constructor() {
this.state = {
Username: '',
Password: ''
};
}
// ...
}
label.Content = (Convert.ToInt32(textBox.Text) + Convert.ToInt32(textBox1.Text)).ToString();
private static string Sum(string a, string b)
{
return (Convert.ToInt32(a) + Convert.ToInt32(b)).ToString();
}
label.Content = Sum(textBox.Text, textBox1.Text);
label.Content = Sum(textBox.Text, textBox1.Text, textBox2.Text, textBox4.Text);
private static string Sum(params string[] n)
{
return n.Sum(itm => Convert.ToInt32(itm)).ToString();
}
public static class TextBoxExtension
{
public static string SumWith(this TextBox value, params TextBox[] n)
{
return (Convert.ToInt32(value.Text) + n.Sum(itm => Convert.ToInt32(itm.Text))).ToString();
}
}
label.Content = textBox.SumWith(textBox1, textBox2, textBox3);
public static class StringExtension
{
public static string SumWith(this string value, params string [] n)
{
return (Convert.ToInt32(value) + n.Sum(itm => Convert.ToInt32(itm))).ToString();
}
}
label.Content = textBox.Text.SumWith(textBox1.Text);
var f = new Form2();
f.Owner = this;
f.FormClosed += (object s, FormClosedEventArgs args) =>
{
MessageBox.Show("Форма закрыта!");
};
f.Show();
private void button1_Click(object sender, EventArgs e)
{
var f = new Form2();
f.Owner = this;
f.FormClosed += Form2_FormClosed;
f.Show();
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("Форма закрыта!");
}
var f = new Form2();
f.Owner = this;
// главная форма будет недоступна
f.ShowDialog();
// после закрытия диалоговой формы, выполнение продолжится
MessageBox.Show("Форма закрыта!");
dataAdapter = new SqlDataAdapter("Имя процедуры", connectionString);
dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
var connection = new SqlConnection(connectionString);
// connection.Open();
var cmd = new SqlCommand("Имя процедуры", connection);
cmd.CommandType = CommandType.StoredProcedure;
dataAdapter = new SqlDataAdapter(cmd);
s = s + (base64[i + 1] + base64[i]);
s = s + (base64[i + 1].ToString() + base64[i].ToString());
byte[] data;
data = Convert.FromBase64String(DecryptBFF(book.Content));
File.WriteAllBytes("output.swf", data);
// создаем переменную типа EventHandler
EventHandler handler = null;
// создаем анонимный метод для обработки события и передаем его переменной
handler = (sender, e) =>
{
MessageBox.Show("Hello!");
// удаляем обработчик
((Button)sender).Click -= handler;
};
// добавляем обработчик
button1.Click += handler;
// добавляем обработчик
button1.Click += (sender, e) =>
{
MessageBox.Show("Hello!");
// получаем поле EventClick
var f = typeof(Control).GetField
(
"EventClick",
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static
);
// получаем значение EventClick для sender
var k = f.GetValue(sender);
// получаем свойство
var p = sender.GetType().GetProperty
(
"Events", BindingFlags.NonPublic | BindingFlags.Instance
);
// получаем значение свойства Events для sender
var events = (EventHandlerList)p.GetValue(sender, null);
// удаляем обработчик из списка событий
events.RemoveHandler(k, events[k]);
};
public class Toster
{
public event EventHandler AnyEvent;
public void AnyEventHarakiri()
{
foreach (Delegate d in this.AnyEvent.GetInvocationList())
{
this.AnyEvent -= (EventHandler)d;
}
}
}
var t = new Toster();
t.AnyEvent += (sender, e) => { };
t.AnyEventHarakiri();
string filePath = "123.jpg";
using (var file = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Inheritable))
{
pictureBox1.Image = Image.FromStream(file);
}
File.Delete(filePath);
public class MyClass
{
public readonly int Value = 0;
public MyClass()
{
this.Value = 123;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Timers;
using System.Threading;
namespace ConsoleApplication20
{
class Program
{
static void Main(string[] args)
{
// создаем экземпляр класса
var t = new Toster(199065);
// выводим значение константы ProjectName
// доступ только через Toster
Console.WriteLine(Toster.ProjectName);
// доступа к локальным константам здесь нет
// Toster.CounterPattern
// t.CounterPattern
// выводим заголовок вопроса
Console.WriteLine(t.Title);
// бесконечность - не предел!
while (true)
{
// t.Id = 123;
// мы не можем поменять идентификатор
// следовательно, этот код, логически, будет работать правильно
// выводим число ответов
Console.WriteLine("Ответов: {0}", t.AnswersCount);
// t.AnswersCount = 123
// мы не можем менять значение readonly свойства,
// но оно может меняться внутри экземпляра класса
// пауза 10 сек.
Thread.Sleep(10000);
}
}
}
public class Toster
{
// публичная константа, доступ через Toster
public const string ProjectName = "Тостер";
// локальная константа, доступна только в рамках этого класса
const string CounterPattern = "<span class=\"section-header__counter\" role=\"answers_counter\">";
// публичные поля только для чтения
// значение может быть установлено в конструкторе
public readonly string Title = "Нет данных";
public readonly int Id = 0;
// свойство только для чтения
// значение может меняться в процессе жизни экземпляра класса
// при помощи локальной переменной
private int _AnswersCount = 0;
public int AnswersCount
{
get
{
return _AnswersCount;
}
}
// это просто таймер
private System.Timers.Timer Timer = null;
// а это конструктор<s>, но не Lego</s>
public Toster(int id)
{
if (id <= 0) { return; }
// получаем вопрос
var web = new WebClient();
web.Encoding = Encoding.UTF8;
var result = web.DownloadString(String.Format("https://toster.ru/q/{0}", id));
// из шаблона url тоже можно сделать константу
// либо в классе можно сделать readonly свойство,
// которое будет на лету формировать итоговый адрес:
// return String.Format("https://toster.ru/q/{0}", this.Id)
// устанавливаем значения для полей
this.Id = id;
this.Title = WebUtility.HtmlDecode
(
result.Substring
(
result.IndexOf("<title>") + "<title>".Length,
result.IndexOf("</title>") - result.IndexOf("<title>") - "<title>".Length
)
);
// выдергиваем число ответов на вопрос
this.ParseAnswersCount(result);
// запускаем периодическую проверку <s>Менделеева</s>
Timer = new System.Timers.Timer(10000);
Timer.Elapsed += Timer_Elapsed;
}
// обработчик истечения интервала времени
private void Timer_Elapsed(object sender, EventArgs e)
{
var web = new WebClient();
web.Encoding = Encoding.UTF8;
var result = web.DownloadString(String.Format("https://toster.ru/q/{0}", this.Id));
this.ParseAnswersCount(result);
}
// выдергиватель количества ответов
private void ParseAnswersCount(string value)
{
int startstart = value.IndexOf("Ответы на вопрос");
int start = value.IndexOf(CounterPattern, startstart) + CounterPattern.Length;
int len = value.IndexOf("</span>", start) - start;
_AnswersCount = Convert.ToInt32(value.Substring(start, len));
}
}
}
private void button1_Click(object sender, EventArgs e)
{
// создаем меню
var menu = new MenuStrip();
menu.Items.Add("Меню");
// перебираем узлы
foreach (TreeNode n in treeView1.Nodes)
{
// создаем элемент меню
var menuItem = new ToolStripMenuItem();
menuItem.Text = n.Text;
// перебирем детей
ConvertNodeToMenu(menuItem, n);
// добавляем элемент в меню
((ToolStripMenuItem)menu.Items[0]).DropDownItems.Add(menuItem);
}
// добавляем меню на форму
this.Controls.Add(menu);
}
private void ConvertNodeToMenu(ToolStripMenuItem menuParent, TreeNode node)
{
foreach (TreeNode n in node.Nodes)
{
// создаем элемент меню
var menuItem = new ToolStripMenuItem();
menuItem.Text = n.Text;
// перебираем детей
ConvertNodeToMenu(menuItem, n);
// добавляем элемент в меню
menuParent.DropDownItems.Add(menuItem);
}
}
private void button1_Click(object sender, EventArgs e)
{
// создаем меню
var menu = new MenuStrip();
menu.Items.Add("Меню");
// берем первый элемент меню
var menuItem = (ToolStripMenuItem)menu.Items[0];
// получаем узлы и добавляем в меню
menuItem.DropDownItems.AddRange
(
treeView1.Nodes.Cast<TreeNode>().Select
(
n => new ToolStripMenuItem(n.Text, null, ConvertNodeToMenu(n))
).ToArray()
);
// добавляем меню на форму
this.Controls.Add(menu);
}
private ToolStripMenuItem[] ConvertNodeToMenu(TreeNode node)
{
return node.Nodes.Cast<TreeNode>().Select
(
n => new ToolStripMenuItem(n.Text, null, ConvertNodeToMenu(n))
).ToArray();
}
https://graph.facebook.com/oauth/access_token?client_id=123&client_secret=abc&
grant_type=password&username=pupkin&password=000
base.GrantType = GrantType.ClientCredentials;
var client = new InstagramClient
(
"9fcad1f7740b4b66ba9a0357eb9b7dda",
"3f04cbf48f194739a10d4911c93dcece"
);
client.ReturnUrl = "http://oauthproxy.nemiro.net/";
client.Username = "aleksey";
client.Password = "Frif#dser#23dssd@Dsdfjjfsi";
var accessToken = client.AccessToken;
{"code": 400, "error_type": "OAuthException", "error_message": "Invalid grant_type"}
var client = new FacebookClient("1435890426686808", "c6057dfae399beee9e8dc46a4182e8fd");
client.Username = "aleksey";
client.Password = "a6lGmDZsCb1SuHsIQw89ZqK9";
var accessToken = client.AccessToken;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication9
{
public partial class Form1 : Form
{
/// <summary>
/// Получает текущее положение ползунка полосы прокрутки.
/// </summary>
/// <param name="hWnd">Дескриптор.</param>
/// <param name="nBar">Тип.</param>
/// <returns></returns>
[DllImport("User32.dll")]
public extern static int GetScrollPos(IntPtr hWnd, int nBar);
/// <summary>
/// Функция для отправки сообщений.
/// </summary>
/// <param name="hWnd">Дескриптор.</param>
/// <param name="msg">Само сообщение.</param>
/// <param name="wParam">Параметры.</param>
/// <param name="lParam">Дополнительные параметры.</param>
[DllImport("User32.dll")]
public extern static int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
public enum ScrollBarType : uint
{
SbHorz = 0,
SbVert = 1,
SbCtl = 2,
SbBoth = 3
}
public enum Message : uint
{
/// <summary>
/// Сообщение для вертикальной полосы прокрутки
/// </summary>
WM_VSCROLL = 0x0115
}
public enum ScrollBarCommands : uint
{
/// <summary>
/// Положение ползунка полосы прокрутки в конце операции
/// </summary>
SB_THUMBPOSITION = 4
}
private RichTextBox rich1 = new RichTextBox();
private RichTextBox rich2 = new RichTextBox();
public Form1()
{
InitializeComponent();
// тестовый текст
string text = "";
for (int i = 0; i < 99; i++)
{
text += "Имеется 2 richTextBox, нужно установить значение текущего вертикального скролла первого, как у в данный момент у второго. Пробовал всякие offset, копался в гугле, но ничего внятного не нашел.\r\n";
}
// добавляем поля на форму
rich1.Name = "rich1";
rich1.Dock = DockStyle.Top;
rich1.Text = text;
rich1.VScroll += rich_VScroll;
this.Controls.Add(rich1);
rich2.Name = "rich2";
rich2.Dock = DockStyle.Top;
rich2.Text = text;
rich2.VScroll += rich_VScroll;
this.Controls.Add(rich2);
}
/// <summary>
/// Обработчик изменения положения ползунка полосы прокрутки.
/// </summary>
private void rich_VScroll(object sender, EventArgs e)
{
// кто вызвал событие
RichTextBox currentRich = (RichTextBox)sender;
// если событие вызвал rich2, то второй будет rich1 и наоборот
RichTextBox otherRich = currentRich.Name.Equals("rich1") ? rich2 : rich1;
// получаем позицию ползунка полосы прокрутки текущего поля
int pos = GetScrollPos(currentRich.Handle, (int)ScrollBarType.SbVert);
pos <<= 16;
// чтобы не застрять в бесконечности
// (можно так не делать и прикрутить обработчик только к одному полю)
otherRich.VScroll -= rich_VScroll;
// --
// передаем позицию во второе поле
uint par = (uint)ScrollBarCommands.SB_THUMBPOSITION | (uint)pos;
SendMessage(otherRich.Handle, (int)Message.WM_VSCROLL, new IntPtr(par), new IntPtr(0));
otherRich.VScroll += rich_VScroll;
}
}
}
$.ajax({
type: "POST",
url: "WebService1.asmx/VerifySignature",
contentType: "application/json",
data: JSON.stringify({ certInfo: keyInfo }), // обернуть все параметры
success: function (result) {
alert(result);
console.log(result);
}
});
var value = "a ack fghjy fghfh asn";
// разбиваем на массив
var arr = value.Split();
// сортируем массив
Array.Sort(arr);
// склеиваем массив в строку
string result = String.Join(" ", arr);
// выводим результат
Console.WriteLine(result);
Console.WriteLine(String.Join(" ", "a ack fghjy fghfh asn".Split().OrderBy(itm=>itm)));
-- временная таблица
-- в моем примере всего два поля id и value
CREATE TABLE #tmp
(
num int primary key identity,
id bigint,
value nvarchar(max)
);
-- структура xml:
-- <items>
-- <item id="123">значение</item>
-- <item id="456">значение</item>
-- </items>
-- переносим xml в таблицу
INSERT INTO #tmp
SELECT
ISNULL(n.value('@id', 'bigint'), 0), -- идентификатор существующих данных
n.value('.', 'nvarchar(max)') -- значение данных
FROM @xml.nodes('/items/item') AS node(n);
-- обновляем записи в таблице [table], у которых есть идентификатор
UPDATE a SET value = b.value
FROM table AS a
INNER JOIN #tmp AS b ON a.id = b.id
WHERE b.id <> 0;
-- добавляем записи, у которых нет идентификатора
INSERT INTO table (value)
SELECT value FROM #tmp AS b WHERE b.id = 0;
-- удаляем временную таблицу
DROP TABLE #tmp;